如何在MongoCollection Java驱动程序3中执行MongoDB findAndModify查询?

Vuk*_*pic 5 java mongodb

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
})
Run Code Online (Sandbox Code Playgroud)

findOneAndUpdate方法的文档说明了这一点

返回:已更新的文档.根据returnOriginal属性的值,这可能是更新前的文档,也可能是更新后的文档.

但找不到任何关于这个returnOriginal属性的信息.任何人都知道如何正确设置它?

Luk*_*tor 5

与您的查询等效的 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);
Run Code Online (Sandbox Code Playgroud)

关于returnOriginal财产 - 你是对的 - 不存在这样的事情。javadoc 在这个地方是无关紧要的。但是, FindOneAndUpdateOptionsreturnDocument中有一个属性。您可以将其设置为或相当于。ReturnDocument.AFTERReturnDocument.BEFOREnew: true/false