MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Problem mit MongoDB und Upsert

Erstens sieht es nicht so aus, als würden Sie überhaupt einen Upsert machen. Die Syntax dafür in der Java-API hätte ein drittes Argument für db.update, das auf „true“ gesetzt ist.

   db.update(com.mongodb.DBObject, com.mongodb.DBObject, boolean /*upsert */, boolean /* multi */)

Sie sollten auch keinen $push ausführen - die Semantik dessen, was Sie in der Mongo-Shell tun möchten, wäre:

db.collection.update( {"resourceVacation":resourceID}, {$set:{"vacationList":[...]}, true)

Dies sagt:Wenn resourceVacation mit resourceID existiert, dann machen Sie seine "vacationList" zu dem, was ich Ihnen gebe. Wenn es nicht existiert, fügen Sie diesen Datensatz ein.

Wenn Sie die Java-API direkt verwenden, wäre das Äquivalent des obigen ausreichend.

Sieht so aus, als würden Sie MongoTemplate von Spring verwenden. Sie müssen überprüfen, welche Version Sie verwenden, da diese keine Upserts zulässt . Dieses Problem ist jedoch als gelöst markiert. Wenn Sie bei der älteren Version hängen bleiben, gibt es eine beschriebene Problemumgehung hier .

Wenn Sie auf der neuesten Version sind, sollten Sie in der Lage sein, die neu hinzugefügte Upsert-Methode direkt zu verwenden, wie beschrieben hier .