Jestem trochę zdezorientowany findAndModify
metodą w MongoDB. Jaka jest jego przewaga nad update
metodą? Wydaje mi się, że najpierw zwraca element, a następnie go aktualizuje. Ale dlaczego muszę najpierw zwrócić przedmiot? Czytałem MongoDB: ostateczny przewodnik i mówi, że jest przydatny do manipulowania kolejkami i wykonywania innych operacji, które wymagają atomowości w stylu get-and-set. Ale nie rozumiałem, jak to osiąga. Czy ktoś może mi to wyjaśnić?
175
findAndModify
gwarantuje, że żadna inna operacja aktualizacji nie będzie mu przeszkadzać?findAndModify
zwraca dokument, aktualizacja nie.Jeśli dobrze zrozumiałem Dwighta Merrimana (jednego z oryginalnych autorów mongoDB), użycie update do modyfikacji pojedynczego dokumentu, tj. ("Multi": false} również jest atomowe. Obecnie powinno być również szybsze niż wykonanie równoważnej aktualizacji przy użyciu
findAndModify
.źródło
Z dokumentacji MongoDB (podkreślenie dodane):
źródło
findAndModify()
, że domyślnie modyfikuje tylko jeden dokument iupdate()
może aktualizować jeden lub więcej dokumentów, kiedy używamarrayFilters
,findAndModify()
aktualizuje wszystkie dopasowania. Może to błąd ??Jedną z przydatnych klas przypadków użycia są liczniki i podobne przypadki. Na przykład spójrz na ten kod (jeden z testów MongoDB): find_and_modify4.js .
Zatem wraz z
findAndModify
tobą zwiększaj licznik i uzyskuj jego zwiększoną wartość w jednym kroku. Porównaj: jeśli (A) wykonasz tę operację w dwóch krokach, a ktoś inny (B) wykona tę samą operację między twoimi krokami, A i B mogą otrzymać tę samą ostatnią wartość licznika zamiast dwóch różnych (tylko jeden przykład możliwych problemów).źródło
Użyliśmy metody findAndModify () dla operacji licznika (inc lub dec) i innych pojedynczych pól mutacji przypadków. Migracja naszej aplikacji z Couchbase do MongoDB, znalazłem to API, aby zastąpić kod, który wykonuje GetAndlock (), zmodyfikować zawartość lokalnie, replace (), aby zapisać i ponownie Get (), aby pobrać zaktualizowany dokument z powrotem. W mongoDB właśnie użyłem tego pojedynczego interfejsu API, który zwraca zaktualizowany dokument.
źródło