Mongoose: متداخلة الظاهري ملء فواصل الخيارات على الملء الأصل.

تم إنشاؤها على ٢٧ مايو ٢٠١٨  ·  3تعليقات  ·  مصدر: Automattic/mongoose

أعتقد أن هناك خطأ في استخدام السكان والخيارات المتداخلة.

استفساري الحالي هو كما يلي:

...
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

confirmed-bug

التعليق الأكثر فائدة

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>:

سأسافر معظم اليوم ، لكن سأتمكن من النظر في الأمر الليلة أو أول شيء غدًا.

ال 3 كومينتر

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 واستعدت مستندات متعددة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات