有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

获取/返回MongoDb中新插入或新修改的文档(使用java驱动程序)

我在MongoDb中插入/更新的文档具有自动更新的currentDate,例如:

> db.TEMP.update({"event" : "sold my iPhone"}, { $currentDate: {lastModified: true}} , {upsert: true} )
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5a6b3799a187fac295097a64")})

对我来说,在编写对象时就知道“lastModified”的值是至关重要的。由于WriteResult返回新插入的对象id,因此我只能获取该对象:

> db.TEMP.findOne({"_id" : ObjectId("5a6b3799a187fac295097a64")})
{
"_id" : ObjectId("5a6b3799a187fac295097a64"),
"event" : "sold my iPhone",
"lastModified" : ISODate("2018-01-26T14:13:45.031Z")
}

但这意味着每一个都要进行2 DB的操作(写入和读取)。有没有办法让“WriteResult”包含lastModified对象,或者只返回新插入/更新的对象(甚至光标)

哦,我使用的是java驱动程序,所以我需要用java,而不是命令行


共 (1) 个答案

  1. # 1 楼答案

    将其更改为findOneAndUpdate而不是updateOne,这样也会返回更新的文档

    TDocument findOneAndUpdate(Bson filter, Bson update);
    

    或者

    TDocument findOneAndUpdate(Bson filter, Bson update, FindOneAndUpdateOptions options);
    

    范例

        Document updatedDoc = collection.findOneAndUpdate(
                eq("name", "Café Con Leche"),
                combine(set("stars", 1), set("contact.phone", "228-555-9999"), currentDate("lastModified")));
        System.out.println(updatedDoc);
    

    日志

    20:41:44.748 [main] DEBUG org.mongodb.driver.protocol.command - Sending command {findandmodify : BsonString{value='restaurants'}} to database test on connection [connectionId{localValue:2, serverValue:21}] to server 127.0.0.1:27017
    20:41:44.764 [main] DEBUG org.mongodb.driver.protocol.command - Command execution completed
    Document{{_id=5a6b43d741b7d10d1cb3edb5, name=Café Con Leche, contact=Document{{phone=228-555-9999, email=cafeconleche@example.com, location=[-73.92502, 40.8279556]}}, stars=1, categories=[Bakery, Coffee, Pastries], lastModified=Fri Jan 26 20:40:34 IST 2018}}