mam ten schemat:
article: {
subject,
comments: []
}
jeśli mam 8 komentarze i zapytania
article.find({}, {
comments: {
$slice: [ -10, 5 ]
}
});
i uzyskać komentarzy od indeksu 0 do indeksu 4
, ale chcę, aby komentarze z indeksu 0 do indeksu 2 były zwracane z powodu stronicowania.
(strona 1 $ plaster [-5, 5] od wskaźnika 3 do tabeli 7, strona 2 $ wycinka [-10, 5] w indeksie 0, indeks 2)
teraz muszą przejść inny parametr „lastId "Aby porównać wszystkie komentarze i usunąć" _id "<" lastId ", ale myślę, że jest trochę hacky.
Ktoś ma dobre rozwiązanie?
komentarze nie są długimi tekstami i dużą ilością, więc 16 MB na dokument jest wystarczające. i naprawdę martwię się o elastyczność i wydajność. tak naprawdę jest to zły sposób na przechowywanie komentarzy (lub innych niezwiązanych tablic) jako dokumentu osadzonego, prawda? – Kevin
Cóż, niektóre rodzaje zapytań są bardzo trudne do wykonania z dokumentami osadzonymi, np. Podaj mi wszystkie komentarze danego użytkownika. Zasadniczo jest to dobry przypadek dla denormalizacji. – christkv
Zgadzam się. Ale myślę też, że wbudowany lub nie zależy od tego, czego potrzebuje aplikacja, jeśli nie potrzebuję komentarzy zapytań przez inne pola, ale tylko przez artykuł (innymi słowy, komentarze zawsze pojawiają się z artykułem), wolę osadzić tablicę komentarzy w dokumencie artykułu. – Kevin