Mongodb upsert aktualizuje tylko wybrane pola, ale wstaw wszystkie

Próbuję użyć upsert w MongoDB, aby zaktualizować pojedyncze pole w dokumencie, jeśli znaleziono LUB wstawić cały nowy dokument z dużą ilością pól. Problem polega na tym, że wydaje mi się, że MongoDB albo zastępuje każde pole, albo wstawia podzbiór pól w swojej operacji upsert, tj. Nie może wstawić więcej pól, niż faktycznie chce zaktualizować.

Chcę:

Pytam o pojedynczą unikalną wartośćJeśli dokument już istnieje, tylko wartość znacznika czasu (pozwala nazwać go „lastseen”) jest aktualizowana do nowej wartościJeśli dokument nie istnieje, dodam go z długą listą różnych par klucz / wartość, które powinny pozostać statyczne przez pozostałą część jego życia.

Zilustrujmy:

Ten przykład z mojego zrozumienia zaktualizuje datę „lastseen”, jeśli zostanie znaleziona „name”, ale jeśli „name” nie zostanie znalezione, wstawi tylko „name” + „lastseen”.

db.somecollection.update({name: "some name"},{ $set: {"lastseen": "2012-12-28"}}, {upsert:true})

Gdybym dodał więcej pól (par klucz / wartość) do drugiego argumentu i upuścił zestaw $, wtedy każde pole zostanie zastąpione przy aktualizacji, ale przyniosłoby pożądany efekt na wstawianie. Czy jest coś takiego jak $ insert lub podobne do wykonywania operacji tylko podczas wstawiania?

Wydaje mi się więc, że mogę uzyskać tylko jedną z następujących rzeczy:

Prawidłowe zachowanie aktualizacji, ale wstawi dokument zawierający tylko podzbiór żądanych pól, jeśli dokument nie istniejePrawidłowe zachowanie wstawki, ale nadpisuje wszystkie istniejące pola, jeśli dokument już istnieje

Czy moje zrozumienie jest prawidłowe? Jeśli tak, czy można to rozwiązać za pomocą jednej operacji?

questionAnswers(2)

yourAnswerToTheQuestion