繁体   English   中英

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

[英]How to execute MongoDB findAndModify query in MongoCollection Java driver 3?

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方法的文档说明了这一点

返回:已更新的文档。 根据returnOriginal属性的值,这将是更新前的文档或更新后的文档。

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

与您的查询等效的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.AFTERReturnDocument.BEFORE ,它等效于new: true/false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM