我正在执行一个循环和更新
,类似于this .
我有一个包含如下字段的现有文档:
"field1" : {
"field2" : []
}
使用空数组。
使用 Java
,如何将文档放入空数组中?
这样做...
// BasicDBObject obj...
obj.put("field1.field2",
new BasicDBObject().append("a", "aa").append("b", "bb"));
我收到一条错误消息:
java.lang.IllegalArgumentException: Invalid BSON field name field1.field2
在 JavaScript
中,这很简单 - 您只需这样做,例如:
obj.field1.field2["a"] = "aa";
等等
有什么想法吗?
提前致谢。
最佳答案
你的语法有点乱。您不能在 Java
中使用 点
表示法。您需要创建
和嵌入
对象。
生成等同于:
{ "field1" : { "field2" : [ { "a" : "aa"} , { "b" : "bb"}]}}
您需要进行以下操作,
BasicDBList list = new BasicDBList();
list.add(new BasicDBObject("a","aa"));
list.add(new BasicDBObject("b","bb"));
DBObject fieldTwo = new BasicDBObject("field2",list);
DBObject fieldOne = new BasicDBObject("field1",fieldTwo);
类似地,要将某些内容推送到现有的 list
中,您需要,
while (cursor.hasNext()) {
BasicDBObject obj = (BasicDBObject) cursor.next();
BasicDBObject fieldOne = (BasicDBObject)(obj.get("field1"));
// get the list
BasicDBList field2List = (BasicDBList)(fieldOne.get("field2"));
// add something to it
field2List.add(new BasicDBObject("a","aa"));
list.add(new BasicDBObject("b","bb"));
list.add(new BasicDBObject("c","cc"));
//save it
this.dataColl.save(obj);
}
会给你,
{ "field1" : { "field2" : [ { "a" : "aa"} , { "b" : "bb"} , { "c" : "cc"}]}}
BasicDBObject
以键 name
和 value
作为参数。key
名称不能包含 .
运算符。这就是您收到错误的原因:
Invalid BSON field name field1.field2
关于Java、MongoDB : how to insert into subdocument's empty array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34444151/