W podanych przykładach zachowanie jest zasadniczo takie samo.
save zachowuje się inaczej, jeśli zostanie przekazany z parametrem „_id”.
Do zapisania, jeśli dokument zawiera _id, wyśle zapytanie o kolekcję w _idpolu, jeśli nie, wstawi.
Jeśli dokument nie istnieje o określonej wartości _id, metoda save () wykonuje wstawienie z określonymi polami w dokumencie.
Jeśli istnieje dokument o określonej wartości _id, metoda save () przeprowadza aktualizację, zastępując wszystkie pola w istniejącym rekordzie polami z dokumentu.
Zapisz a aktualizacja :
updatemodyfikuje istniejący dokument dopasowany do parametrów zapytania. Jeśli nie ma takiego pasującego dokumentu, to upsertpojawia się na zdjęciu.
upsert : false : Nic się nie dzieje, gdy taki dokument nie istnieje
upsert : true : Nowy dokument zostanie utworzony z zawartością równą parametrom zapytania i parametrom aktualizacji
save: Nie zezwala na żadne parametry zapytań. jeśli _idistnieje i jest zgodny dokument z tym samym _id, zastępuje go. Gdy nie określono _id / brak pasującego dokumentu, wstawia dokument jako nowy.
oba mają inną składnię. Update przyjmuje wiele argumentów ({condition}, {update to doc}, upsert, multi), podczas gdy save akceptuje tylko jeden argument (_id jest parametrem dla argumentu warunkowego). Update może akceptować dowolny warunek, ale save ma ograniczenie warunku tylko na pole _id.
Save()/ \
/ \
Having _id NotHaving _id
->Inthiscase save will do->It will do normal insertion
upsert to insert.Now in thiscase as insert()do.
what that means, it means
take the document and replace
the complete document having same
_id.
Rozważmy tutaj dwa przypadki dla wstawienia: -
1) Posiadanie _id dokumentu w kolekcji.
2) Brak identyfikatora _id dokumentu w kolekcji.
Insert()/ \
/ \
DocHaving _id in collection DocNotHaving _id
-> E11000 duplicate key ->Insert a new doc inside the collection.
error index:
Tak więc save będzie działał jako aktualizacja, jeśli zostanie dostarczony z identyfikatorem obiektu, pod warunkiem, że identyfikator obiektu już istnieje, w przeciwnym razie dokona wstawienia.
Jeśli spróbujesz użyć polecenia „wstaw” z identyfikatorem, który był wcześniej używany w tej samej kolekcji, zostanie wyświetlony zduplikowany błąd klucza. Jeśli użyjesz „zapisz” z identyfikatorem, który jest już w tej samej kolekcji, zostanie on zaktualizowany / nadpisany.
Jeśli chcesz zrobić prawdziwą aktualizację, sugerowałbym użycie opcji „aktualizacja”. Aktualizacja nie nadpisze w sposób, w jaki zrobiłby to Save, jeśli zapisujesz używając tego samego identyfikatora, który jest już w kolekcji.
Na przykład masz dwa pola „x” i „y” i chcesz zachować oba, ale zmienić wartość „x”. Jeśli wybrałeś komendę "zapisz" i nie włączyłeś y do poprzedniej wartości lub nie masz w ogóle y w swoim składowaniu, wtedy y nie miałby już tej samej wartości lub nie istniałby. Jeśli jednak zdecydujesz się aktualizować za pomocą $ set i masz tylko x uwzględnione w instrukcji aktualizacji, nie wpłyniesz na y.
db.collection.save()metoda aktualizuje dokument, jeśli dokument o tym samym identyfikatorze _id już istnieje w bazie danych. Gdy dokument o tym samym identyfikatorze _id już istnieje w bazie danych, metoda zapisu całkowicie zastępuje dokument nowym dokumentem. Z książki - Pro MongoDB Development
jack blank
1
Jeśli chodzi o ORACLE: mongo insert => Oracle insert mongo save => Oracle merge
Odpowiedzi:
Zapisz Vs Insert:
W podanych przykładach zachowanie jest zasadniczo takie samo.
save
zachowuje się inaczej, jeśli zostanie przekazany z parametrem „_id”.Do zapisania, jeśli dokument zawiera
_id
, wyśle zapytanie o kolekcję w_id
polu, jeśli nie, wstawi.Zapisz a aktualizacja :
update
modyfikuje istniejący dokument dopasowany do parametrów zapytania. Jeśli nie ma takiego pasującego dokumentu, toupsert
pojawia się na zdjęciu.upsert : false
: Nic się nie dzieje, gdy taki dokument nie istniejeupsert : true
: Nowy dokument zostanie utworzony z zawartością równą parametrom zapytania i parametrom aktualizacjisave
: Nie zezwala na żadne parametry zapytań. jeśli_id
istnieje i jest zgodny dokument z tym samym_id
, zastępuje go. Gdy nie określono _id / brak pasującego dokumentu, wstawia dokument jako nowy.źródło
Rozważmy tutaj dwa przypadki dla uratowania: -
1) Posiadanie _id w dok.
2) Brak identyfikatora _id w dok.
Rozważmy tutaj dwa przypadki dla wstawienia: -
1) Posiadanie _id dokumentu w kolekcji.
2) Brak identyfikatora _id dokumentu w kolekcji.
źródło
save
wstawić lub zaktualizować dokument.insert
wykonuje tylko wstawianie.Ale w twoim przypadku zrobi to samo, ponieważ dokument dostarczony w zapisie nie ma
_id
pola.źródło
Podając przykład
Uratuj jabłko
Zapisz jabłko z _id poprzednio zapisanego jabłka
Teraz zachowane jabłko zmieniło kolor z czerwonego na prawdziwy czerwony
Zapisz jabłko za pomocą _id
Apple zostało wstawione, ponieważ nie ma jabłka z tym samym identyfikatorem obiektu, aby wykonać aktualizację
Wstaw Orange
Pomarańczowy jest wstawiony
Tak więc save będzie działał jako aktualizacja, jeśli zostanie dostarczony z identyfikatorem obiektu, pod warunkiem, że identyfikator obiektu już istnieje, w przeciwnym razie dokona wstawienia.
źródło
Jeśli spróbujesz użyć polecenia „wstaw” z identyfikatorem, który był wcześniej używany w tej samej kolekcji, zostanie wyświetlony zduplikowany błąd klucza. Jeśli użyjesz „zapisz” z identyfikatorem, który jest już w tej samej kolekcji, zostanie on zaktualizowany / nadpisany.
Jeśli chcesz zrobić prawdziwą aktualizację, sugerowałbym użycie opcji „aktualizacja”. Aktualizacja nie nadpisze w sposób, w jaki zrobiłby to Save, jeśli zapisujesz używając tego samego identyfikatora, który jest już w kolekcji.
Na przykład masz dwa pola „x” i „y” i chcesz zachować oba, ale zmienić wartość „x”. Jeśli wybrałeś komendę "zapisz" i nie włączyłeś y do poprzedniej wartości lub nie masz w ogóle y w swoim składowaniu, wtedy y nie miałby już tej samej wartości lub nie istniałby. Jeśli jednak zdecydujesz się aktualizować za pomocą $ set i masz tylko x uwzględnione w instrukcji aktualizacji, nie wpłyniesz na y.
źródło
Jak widać tutaj, metoda save zasadniczo wykona upsert (zaktualizuj, jeśli znajdzie dokument, wstaw w przeciwnym razie):
http://docs.mongodb.org/manual/reference/method/db.collection.save/#db.collection.save
Wkładka to po prostu prosta wkładka.
źródło
Rozważ poniższy dokument
jeśli baza danych zawiera już dokument z _id: 1, to
operacja zapisu wyrzuci wyjątek jak poniżej
i gdzie jako operacja wstawiania, po prostu nadpisuje dokument.
źródło
db.collection.save()
metoda aktualizuje dokument, jeśli dokument o tym samym identyfikatorze _id już istnieje w bazie danych. Gdy dokument o tym samym identyfikatorze _id już istnieje w bazie danych, metoda zapisu całkowicie zastępuje dokument nowym dokumentem. Z książki - Pro MongoDB DevelopmentJeśli chodzi o ORACLE: mongo insert => Oracle insert mongo save => Oracle merge
źródło
db.<collection_name>.save(<Document>)
jest równoważne kwerendzie InsertOrUpdate.While,
db.<collection_name>.insert(<Document>)
jest odpowiednikiem samego Wstaw zapytanie.źródło