MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Problema do MongoDB e do upsert


Primeiro, não parece que você está fazendo um upsert. A sintaxe para isso na API Java teria um terceiro argumento para db.update definido como true.
   db.update(com.mongodb.DBObject, com.mongodb.DBObject, boolean /*upsert */, boolean /* multi */)

Você também não deveria estar fazendo um $ push - a semântica do que você diz que quer fazer no shell mongo seria:
db.collection.update( {"resourceVacation":resourceID}, {$set:{"vacationList":[...]}, true)

Isso diz:se resourceVacation com resourceID existir, faça sua "vacationList" o que estou dando a você. Se não existir, insira este registro.

Se você estivesse usando a API Java diretamente, o equivalente ao acima seria suficiente.

Parece que você está usando o MongoTemplate do Spring. Você precisará verificar qual versão está usando porque ela não permitiu upserts . Esse problema está marcado como resolvido. Se você estiver preso na versão mais antiga, há uma solução alternativa descrita aqui .

Se você estiver na versão mais recente, poderá usar o método upsert recém-adicionado diretamente, conforme descrito aqui .