У меня есть большая коллекция под названием posts
, например, так:Как только вернуть X количество встроенных документов с помощью MongoDB?
[{
_id: 349348jf49rk,
user: frje93u45t,
comments: [{
_id: fks9272ewt
user: 49wnf93hr9,
comment: "Hello world"
}, {
_id: j3924je93h
user: 49wnf93hr9,
comment: "Heya"
}, {
_id: 30283jt9dj
user: dje394ifjef,
comment: "Text"
}, {
_id: dkw9278467
user: fgsgrt245,
comment: "Hola"
}, {
_id: 4irt8ej4gt
user: 49wnf93hr9,
comment: "Test"
}]
}]
Мой comments
поддокумент иногда может быть 100s документов долго. Мой вопрос в том, как я могу вернуть только 3 новейших документа (на основе идентификатора) вместо всех документов и вернуть длину всех документов как totalNumberOfComments
в качестве числа вместо этого? Мне нужно сделать это за 100 секунд от posts
. Это то, что конечный результат будет выглядеть так:
[{
_id: 349348jf49rk,
user: frje93u45t,
totalNumberOfComments: 5,
comments: [{
_id: fks9272ewt
user: 49wnf93hr9,
comment: "Hello world"
}, {
_id: j3924je93h
user: 49wnf93hr9,
comment: "Heya"
}, {
_id: 30283jt9dj
user: dje394ifjef,
comment: "Text"
}]
}]
Я понимаю, что это может быть завершена после того, как MongoDB возвращает данные от сплайсинга, хотя я думаю, что было бы лучше сделать это в запросе, так что Монго Безразлично» t должен возвращать все comments
за каждые post
все время.
Совершенных. Просто пришлось изменить '$ slice' как' $ slice: ["$ comments", 3] ', так как' $ slice' внутри 'aggregate' требует двух аргументов. Кроме этого, все хорошо! Спасибо JBone. – Fizzix