У меня есть эта схема:
article: {
subject,
comments: []
}
, если у меня есть 8 комментариев, и запрос
article.find({}, {
comments: {
$slice: [ -10, 5 ]
}
});
И я получаю комментарии от индекса 0 до индекса 4,
, но я хочу только комментарии от индекса 0 до индекса 2, который будет возвращен из-за пейджинга.
(страницы 1 $ ломтик [-5, 5] из индекса 3 к индексу 7, страница 2 $ ломтика [-10, 5] из индекса 0 до индекса 2)
теперь я должен передать другой параметр «lastId «сравнить каждый комментарий и удалить« _id »<« lastId », но я думаю, что он немного взломан.
У кого-нибудь есть хорошее решение для этого?
комментарии не длинный текст и большая сумма, поэтому 16 МБ на документ вполне достаточно. и о чем я действительно беспокоюсь - это гибкость и эффективность. так что это действительно действительно плохой способ хранить комментарии (или любой другой несвязанный массив) в качестве встроенного документа, верно? – Kevin
Ну а какие-то запросы очень сложно сделать со встроенными документами, например, дать мне все комментарии конкретного пользователя. Так что в целом это хороший случай денормализации. – christkv
Я согласен с тобой. Но я также думаю, что встроенные или нет, зависит от того, что нужно приложениям, если мне не нужны комментарии к комментариям по другим полям, но только по этой статье (другими словами, комментарии всегда появляются в статье), я предпочитаю встраивать массив комментариев в документе статьи. – Kevin