gpt4 book ai didi

java - 使用 Java 驱动程序更新 MongoDB 中的数组

转载 作者:IT老高 更新时间:2023-10-28 13:05:40 24 4
gpt4 key购买 nike

我正在使用带有官方 Java 驱动程序(版本 2.6.3)的 MongoDB。我有一个包含购物 list 的 MongoDB 集合。购物 list 的格式为

{ "_id" : { "$oid" : "4e2af1f43f8de96494d5271d"} ,
"name" : "default" ,
"items" : [ { "description" : "Cheese" , "quantity" : 1 , "unit" : "kg"} ,
{ "description" : "Water" , "quantity" : 3 , "unit" : "bottle"} ] }

现在我想用 DBCollectionupdate() 方法向列表中添加一个新项目。但是无论我尝试什么都行不通,尽管它告诉我

{ "updatedExisting" : true , "n" : 1 , "connectionId" : 63 , "err" :  null  , "ok" : 1.0}

我的代码执行以下操作:

    BasicDBObject updateQuery = new BasicDBObject();
updateQuery.put( "name", "default" );

BasicDBObject updateCommand = new BasicDBObject();
updateCommand.put( "$push", new BasicDBObject( "items", newShoppingItem ) );
WriteResult result = shoppingLists.update( updateQuery, updateCommand, true, true );

newShoppingItem 是一个 BasicDBObject,其中包含新商品的数据。我还尝试使用 BasicDBObjectBuilderJSON.parse() 创建 update() 参数,但没有区别。

我还看了其他帖子,尝试了谷歌搜索,但无济于事。我做错了什么?

感谢您的帮助!
奥利弗

最佳答案

是的,上面的代码运行良好。我现在知道我的错误在哪里。我想做到防弹,所以我认为最好在最后使用 DBCollection 上的 save() 并明确保存购物 list DBObject:

shoppingLists.save( shoppingList );

我现在在其他一些论坛上读到,您从数据库中检索到的对象之后不会与数据库同步(现在对我来说听起来有点合乎逻辑:))。所以我每次都自己覆盖更改。删除上面的行后它起作用了:)

所以有一个重要的规则:当您更新您的 DBCollection 时——这会直接发送到数据库! – 不要保存更新前查询的DBObject!它将覆盖您的更新!

关于java - 使用 Java 驱动程序更新 MongoDB 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com