Mongoose: Opsi jeda populasi bersarang virtual pada populasi induk.

Dibuat pada 27 Mei 2018  ·  3Komentar  ·  Sumber: Automattic/mongoose

Saya percaya ada bug menggunakan populasi dan opsi bersarang.

Permintaan saya saat ini adalah sebagai berikut:

...
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' }
        }
      ])
...

Saat memasukkan options pada comments populate (yang memiliki populate lain yang bersarang di dalamnya), ia mengembalikan lebih dari limit ditentukan dan sort tidak diterapkan. Jika populasi bersarang dihapus, ia berfungsi sebagaimana dimaksud.

Saat ini, menggunakan:

Simpul 10.2.1
Luwak 5.1.2
Mongo 3.6.5

Apakah ini bug atau saya melewatkan sesuatu?

Saya percaya ini mungkin terkait: https://github.com/Automattic/mongoose/issues/4321

confirmed-bug

Komentar yang paling membantu

@Mikeysax Saya membuat Intisari ini untuk mereplikasi ini sebaik mungkin dari contoh Anda.

Itu dapat dikloning secara lokal ke dalam folder bernama 6528 dengan demikian:

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:

Keluaran:

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

Saya akan bepergian hampir sepanjang hari, tetapi akan dapat memeriksanya malam ini atau besok pagi.

Semua 3 komentar

@Mikeysax Saya membuat Intisari ini untuk mereplikasi ini sebaik mungkin dari contoh Anda.

Itu dapat dikloning secara lokal ke dalam folder bernama 6528 dengan demikian:

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:

Keluaran:

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

Saya akan bepergian hampir sepanjang hari, tetapi akan dapat memeriksanya malam ini atau besok pagi.

Untuk memperjelas, perbaikan saya menerapkan objek opsi ke kueri seperti yang diharapkan, tetapi tidak memperbaiki masalah di #4321. Saya akan memikirkan masalah itu secara terpisah dan menyerahkan PR jika saya memiliki ide yang layak untuk dibagikan ( Ini sulit untuk dipecahkan ).

Ya membatasi dan mengisi telah menjadi duri di pihak kita untuk waktu yang sangat lama. Ide umumnya adalah bahwa kita harus kembali melakukan kueri terpisah untuk setiap dokumen jika Anda menggunakan populate() dengan limit dan Anda mendapatkan beberapa dokumen kembali.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat