Niedawno zacząłem używać MongoDB i mam pytanie dotyczące aktualizacji tablic w dokumencie. Mam strukturę takiego:MongoDB aktualizuje wiele rekordów tablicy
{
"_id" : ObjectId(),
"post" : "",
"comments" : [
{
"user" : "test",
"avatar" : "/static/avatars/asd.jpg",
"text" : "....."
}
{
"user" : "test",
"avatar" : "/static/avatars/asd.jpg",
"text" : "....."
}
{
"user" : "test",
"avatar" : "/static/avatars/asd.jpg",
"text" : "....."
}
...
]
}
Próbuję wykonać następujące zapytanie:
update({"comments.user":"test"},{$set:{"comments.$.avatar": "new_avatar.jpg"}},false,true)
Problemem jest to, że aktualizuje wszystkie dokumenty, ale aktualizuje tylko pierwszy element tablicy w każdym dokument. Czy istnieje sposób aktualizacji wszystkich elementów tablicy lub powinienem spróbować zrobić to ręcznie? Dzięki.
dzięki za odpowiedź. Cóż, odkąd mongo nie ma złączeń, chciałbym stworzyć system blogów z komentarzami i chciałbym pokazać każdemu użytkownikowi awatara obok jego komentarzy. Wszelkie sugestie, w jaki sposób powinienem strukturyzować mój schemat? –
Konceptualnie trzeba przechowywać gdzieś użytkownika => mapę awatara. Możesz przechowywać awatar każdego użytkownika w dokumencie użytkownika (w kolekcji użytkowników), lub możesz przechowywać mapę użytkownika => awatara dla komentujących dany wpis blogu w polu tego wpisu wpisu blogu. Zobacz http://docs.mongodb.org/manual/applications/database-references/ dla lekkiego traktowania normalizacji w MongoDB i http://docs.mongodb.org/manual/use-cases/storing-comments/ dla analiza przypadków użycia "komentarzy użytkownika". –
Tak, znalazłem rozwiązanie tuż przed tym, jak zobaczyłem twoją odpowiedź. W każdym razie bardzo dziękuję @Jason. –