أعتقد أن هناك خطأ في استخدام السكان والخيارات المتداخلة.
استفساري الحالي هو كما يلي:
...
await Post.find(
{ teacher: req.params.id },
{},
{
sort: { createdAt: -1 },
limit: 5,
skip: parseInt(req.query.skip, 10)
}
).populate([
{
path: 'comments',
options: {
limit: 5,
sort: { createdAt: -1 }
},
populate: { path: 'user', select: '-password' }
}
])
...
عند تضمين options
على comments
(الذي يحتوي على مجموعة أخرى متداخلة في الداخل) ، فإنه يُرجع أكثر من limit
و sort
المحدد. إذا تمت إزالة المجموعة المتداخلة ، فستعمل على النحو المنشود.
حاليًا ، يتم استخدام:
العقدة 10.2.1
النمس 5.1.2
مونجو 3.6.5
هل هذا خطأ أم أنني أفتقد شيئًا؟
أعتقد أن هذا قد يكون مرتبطًا: https://github.com/Automattic/mongoose/issues/4321
Mikeysax لقد أنشأت هذا الجوهر لتكرار هذا بأفضل ما يمكنني من
يمكن استنساخه محليًا في مجلد يسمى 6528 وبالتالي:
issues: git clone https://gist.github.com/7dee38490d8c637976d8fb0805aafb1e ./6528
Cloning into './6528'...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), done.
issues: ls !$
ls ./6528
6528.js models6528.js populate6528.js
issues:
6528>: chmod +x populate6528.js
6528>: chmod +x 6528.js
6528>: ./populate6528.js
created 10 users
created 10 teachers
created 100 posts
created 1000 comments
6528>: ./6528.js
{ AssertionError [ERR_ASSERTION]: 10 === 5
at run (/Users/lineus/dev/Help/mongoose5/issues/6528/6528.js:38:10)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
generatedMessage: true,
name: 'AssertionError [ERR_ASSERTION]',
code: 'ERR_ASSERTION',
actual: 10,
expected: 5,
operator: '===' }
^C
6528>:
سأسافر معظم اليوم ، لكن سأتمكن من النظر في الأمر الليلة أو أول شيء غدًا.
فقط للتوضيح ، يطبق الإصلاح الخاص بي كائن الخيارات على الاستعلام كما هو متوقع ، ولكنه لا يصلح المشكلة في # 4321. سأفكر في هذه المشكلة بشكل منفصل وأرسل العلاقات العامة إذا كان لدي أي أفكار تستحق المشاركة ( من الصعب حلها ).
نعم ، لقد كان الحد والسكان بمثابة شوكة في جانبنا لفترة طويلة جدًا. الفكرة العامة هي أنه سيتعين علينا الرجوع إلى إجراء استعلامات منفصلة لكل مستند إذا كنت تستخدم populate()
مع limit
واستعدت مستندات متعددة.
التعليق الأكثر فائدة
Mikeysax لقد أنشأت هذا الجوهر لتكرار هذا بأفضل ما يمكنني من
يمكن استنساخه محليًا في مجلد يسمى 6528 وبالتالي:
انتاج:
سأسافر معظم اليوم ، لكن سأتمكن من النظر في الأمر الليلة أو أول شيء غدًا.