MongoDB 2.5驱动程序有DBCollection.findAndModify()
方法,但MongoCollection
错过了这种方法。经过一番搜索后,我发现findOneAndUpdate()
现在具有相同的作用。
但是这种方法有不同的签名,不明白如何使用它。这是我想要执行的命令
db.COL1.findAndModify({
query: { id: 2 },
update: {
$setOnInsert: { date: new Date(), reptype: 'EOD' }
},
new: true, // return new doc if one is upserted
upsert: true // insert the document if it does not exist
})
findOneAndUpdate
method的文档说明了
返回: 已更新的文档。根据{{1}}属性的值,这可能是更新前的文档,也可能是更新后的文档。
但无法找到有关此returnOriginal
属性的任何信息。任何人都知道如何正确设置它?
答案 0 :(得分:2)
您的查询的Java等价物应该大致如下:
Document query = new Document("id", 2);
Document setOnInsert = new Document();
setOnInsert.put("date", new Date());
setOnInsert.put("reptype", "EOD");
Document update = new Document("$setOnInsert", setOnInsert);
FindOneAndUpdateOptions options = new FindOneAndUpdateOptions();
options.returnDocument(ReturnDocument.AFTER);
options.upsert(true);
db.getCollection("COL1").findOneAndUpdate(query, update, options);
关于returnOriginal
财产 - 你是对的 - 没有这样的事情。 javadoc在这个地方无关紧要。但是,FindOneAndUpdateOptions中有returnDocument
个属性。您可以将其设置为ReturnDocument.AFTER
或ReturnDocument.BEFORE
,相当于new: true/false
。