Mam kolekcję o nazwie foo
hipotetycznie.
Każde wystąpienie foo
ma pole o nazwie lastLookedAt, które jest znacznikiem czasu UNIX od epoki. Chciałbym móc przejść przez klienta MongoDB i ustawić ten znacznik czasu dla wszystkich istniejących dokumentów (około 20 000 z nich) na bieżący znacznik czasu.
Jaki jest najlepszy sposób radzenia sobie z tym?
Odpowiedzi:
Bez względu na wersję na przykład
<update>
:Jednak w zależności od wersji MongoDB zapytanie będzie wyglądać inaczej. Niezależnie od wersji kluczem jest to, że pusty warunek
{}
będzie pasował do dowolnego dokumentu . W powłoce Mongo lub w dowolnym kliencie MongoDB:Wersja $> = 3,2 :
{}
jest warunkiem (pusty warunek pasuje do dowolnego dokumentu)3.2> $ wersja> = 2.2 :
{}
jest warunkiem (pusty warunek pasuje do dowolnego dokumentu){multi: true}
to opcja „aktualizuj wiele dokumentów”Wersja $ <2.2 :
{}
jest warunkiem (pusty warunek pasuje do dowolnego dokumentu)false
dotyczy parametru „ upsert ”true
dotyczy parametru „wielu” (zaktualizuj wiele rekordów)źródło
Ten kod będzie dla ciebie pomocny
źródło
Używam sterownika MongoDB .NET od nieco ponad miesiąca. Gdybym miał to zrobić za pomocą sterownika .NET, użyłbym metody aktualizacji na obiekcie kolekcji. Najpierw skonstruuję zapytanie, które dostarczy mi wszystkie dokumenty, którymi jestem zainteresowany, i zrobię aktualizację pól, które chcę zmienić. Aktualizacja w Mongo wpływa tylko na pierwszy dokument i aby zaktualizować wszystkie dokumenty wynikające z zapytania, należy użyć flagi aktualizacji „Wiele”. Przykładowy kod następuje ...
źródło