Java驱动程序:如何使用Mongodb的updateFirst方法获取更新后的对象的objectId

西蒙

我正在尝试获取已更新的对象的objectId-这是使用Java驱动程序的Java代码:

    Query query = new Query();
    query.addCriteria(Criteria.where("color").is("pink"));
    Update update = new Update();
    update.set("name", name);
    WriteResult writeResult = mongoTemplate.updateFirst(query, update, Colors.class);

    Log.e("object id", writeResult.getUpsertedId().toString());

日志消息返回null。我在mongolab上使用的是mongo服务器3.0,因为我在免费层上,因此它不应返回null。我的mongo shell也是:

MongoDB Shell版本:3.0.7

是否有一种简单的方法来返回我刚刚更新的文档的对象ID?如果我无法返回upsertedId,getUpsertedId()方法有什么意义?

要执行我想要的操作,我目前必须发出两个非常麻烦的查询:

    //1st query - updating the object first
    Query query = new Query();
    query.addCriteria(Criteria.where("color").is("pink"));
    Update update = new Update();
    update.set("name", name);
    WriteResult writeResult = mongoTemplate.updateFirst(query, update, Colors.class);
    //2nd query - find the object so that I can get its objectid
    Query queryColor = new Query();
    queryColor.addCriteria(Criteria.where("color").is("pink"));
    queryColor.addCriteria(Criteria.where("name").is(name));
    Color color = mongoTemplate.findOne(queryColor, Color.class);
    Log.e("ColorId", color.getId());

根据David的回答,我什至尝试了他的建议,而宁愿在模板上使用upsert,因此我将代码更改为以下代码,但仍然无法正常工作:

    Query query = new Query();
    query.addCriteria(Criteria.where("color").is("pink"));
    Update update = new Update();
    update.set("name", name);
    WriteResult writeResult = mongoTemplate.upsert(query, update, Colors.class);

    Log.e("object id", writeResult.getUpsertedId().toString());
萨拉斯·奈尔

西蒙,我认为有可能在一个查询中实现。您需要的是另一个名为findAndModify()的方法

在mongoDB的Java驱动程序中,它具有一个名为findOneAndUpdate(filter,update,options)的方法

此方法返回已更新的文档。根据您为方法指定的选项,该文件将是更新之前或更新之后的文档。如果没有文档与查询过滤器匹配,则将返回null。它不需要传递选项,在这种情况下,它将返回在应用更新操作之前已更新的文档。

在这里快速查看mongoTemplate Java驱动程序文档:http ://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/FindAndModifyOptions.html告诉我您可以使用方法调用:

public <T> T findAndModify(Query query,
                           Update update,
                           FindAndModifyOptions options,
                           Class<T> entityClass)

如果在查询中未找到该项目,还可以更改FindAndModifyOptions类以使用'upsert'。如果找到该项目,则该对象将被修改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用golang mgo MongoDb驱动程序获取最后插入的ObjectId

来自分类Dev

MongoDB:使用Java驱动程序按ObjectId查询

来自分类Dev

MongoDB使用Java驱动程序版本3.0更新

来自分类Dev

使用Java 3驱动程序更新MongoDB

来自分类Dev

MongoDB Java驱动程序-对象类型

来自分类Dev

如何使用Java驱动程序以两个“ where”条件更新MongoDB中的数组项

来自分类Dev

如何使用 Java 驱动程序在 MongoDB 中获取嵌入文档数组的特定值

来自分类Dev

如何使用MongoDB 3.0 Java驱动程序执行聚合

来自分类Dev

如何在MongoDB Java驱动程序中使用sureIndex

来自分类Dev

如何使用Java驱动程序查询mongodb

来自分类Dev

MongoDB:使用Java驱动程序拉

来自分类Dev

我们如何使用MongoDB Java驱动程序在MongoDB中追加/更新集合的子文档?

来自分类Dev

我们如何使用MongoDB Java驱动程序在MongoDB中追加/更新集合的子文档?

来自分类Dev

获取对象mongodb驱动程序网络核心列表

来自分类Dev

稍加修改后如何在MongoDB中复制很多条目(Java驱动程序)?

来自分类Dev

使用Update Manager更新后,Nvidia驱动程序失败

来自分类Dev

使用Update Manager更新后,Nvidia驱动程序失败

来自分类Dev

MongoDB Java驱动程序更新子文档

来自分类Dev

使用 .Net 驱动程序异步更新或插入 MongoDB 文档

来自分类Dev

使用Java驱动程序更新MongoDB中子字段的值吗?

来自分类Dev

使用Java驱动程序更新MongoDB中子字段的值吗?

来自分类Dev

如何使用官方的MongoDB C#驱动程序将BsonDocument转换为强类型对象?

来自分类Dev

使用C#MongoDB驱动程序,如何序列化对象引用的集合?

来自分类Dev

如何使用.NET的MongoDB驱动程序的updateOne()更新而不替换文档

来自分类Dev

如何使用MongoDB C#驱动程序更新泛型类型

来自分类Dev

使用 csharp mongodb 驱动程序,如何更新列表中的项目?

来自分类Dev

如何使用MongoDb .net驱动程序获取集合中所有文档的几个特定字段

来自分类Dev

如何使用mongodb C#驱动程序获取子文档的集合?

来自分类Dev

如何使用Rust MongoDB驱动程序从添加到GridFS的文件中获取ID?

Related 相关文章

  1. 1

    如何使用golang mgo MongoDb驱动程序获取最后插入的ObjectId

  2. 2

    MongoDB:使用Java驱动程序按ObjectId查询

  3. 3

    MongoDB使用Java驱动程序版本3.0更新

  4. 4

    使用Java 3驱动程序更新MongoDB

  5. 5

    MongoDB Java驱动程序-对象类型

  6. 6

    如何使用Java驱动程序以两个“ where”条件更新MongoDB中的数组项

  7. 7

    如何使用 Java 驱动程序在 MongoDB 中获取嵌入文档数组的特定值

  8. 8

    如何使用MongoDB 3.0 Java驱动程序执行聚合

  9. 9

    如何在MongoDB Java驱动程序中使用sureIndex

  10. 10

    如何使用Java驱动程序查询mongodb

  11. 11

    MongoDB:使用Java驱动程序拉

  12. 12

    我们如何使用MongoDB Java驱动程序在MongoDB中追加/更新集合的子文档?

  13. 13

    我们如何使用MongoDB Java驱动程序在MongoDB中追加/更新集合的子文档?

  14. 14

    获取对象mongodb驱动程序网络核心列表

  15. 15

    稍加修改后如何在MongoDB中复制很多条目(Java驱动程序)?

  16. 16

    使用Update Manager更新后,Nvidia驱动程序失败

  17. 17

    使用Update Manager更新后,Nvidia驱动程序失败

  18. 18

    MongoDB Java驱动程序更新子文档

  19. 19

    使用 .Net 驱动程序异步更新或插入 MongoDB 文档

  20. 20

    使用Java驱动程序更新MongoDB中子字段的值吗?

  21. 21

    使用Java驱动程序更新MongoDB中子字段的值吗?

  22. 22

    如何使用官方的MongoDB C#驱动程序将BsonDocument转换为强类型对象?

  23. 23

    使用C#MongoDB驱动程序,如何序列化对象引用的集合?

  24. 24

    如何使用.NET的MongoDB驱动程序的updateOne()更新而不替换文档

  25. 25

    如何使用MongoDB C#驱动程序更新泛型类型

  26. 26

    使用 csharp mongodb 驱动程序,如何更新列表中的项目?

  27. 27

    如何使用MongoDb .net驱动程序获取集合中所有文档的几个特定字段

  28. 28

    如何使用mongodb C#驱动程序获取子文档的集合?

  29. 29

    如何使用Rust MongoDB驱动程序从添加到GridFS的文件中获取ID?

热门标签

归档