Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java驱动程序更新MongoDB中的数组_Java_Arrays_Mongodb - Fatal编程技术网

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

使用Java驱动程序更新MongoDB中的数组,java,arrays,mongodb,Java,Arrays,Mongodb,我将MongoDB与官方Java驱动程序(版本2.6.3)一起使用。我有一个包含购物清单的MongoDB集合。购物清单的格式如下 { "_id" : { "$oid" : "4e2af1f43f8de96494d5271d"} , "name" : "default" , "items" : [ { "description" : "Cheese" , "quantity" : 1 , "unit" : "kg"} , { "description" : "W

我将MongoDB与官方Java驱动程序(版本2.6.3)一起使用。我有一个包含购物清单的MongoDB集合。购物清单的格式如下

{ "_id" : { "$oid" : "4e2af1f43f8de96494d5271d"} ,
  "name" : "default" ,
  "items" : [ { "description" : "Cheese" , "quantity" : 1 , "unit" : "kg"} ,
              { "description" : "Water" , "quantity" : 3 , "unit" : "bottle"} ] }
现在,我想使用
DBCollection
update()
方法向列表中添加一个新项。但不管我怎么尝试,它都不会起作用,尽管它告诉我

{ "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
,其中包含新项目的数据。我还尝试使用
BasicDBObjectBuilder
JSON.parse()
创建
update()
参数,但没有任何区别

我还查看了其他帖子,尝试过谷歌搜索,但没有结果。我做错了什么

谢谢你的帮助

Oliver是的,上面的代码工作得非常好。我现在知道我的错误在哪里了。我希望做到防弹,因此我认为最好在最后对DBCollection使用save(),并显式保存购物列表DBObject:

shoppingLists.save( shoppingList );
我现在在其他一些论坛上读到,从数据库中检索到的对象随后不会与数据库同步(现在我觉得这听起来有点合乎逻辑:)。所以每次我都会自己重写这些变化。在移除上面的线路后,它工作:)


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

我用MongoDB 2.5.3驱动程序运行了完全相同的代码,它运行得很好。这对我来说很有用,可以更好地理解Mongo Java驱动程序中有些晦涩的语法。谢谢