Java、MongoDB : how to insert into subdocument's empty array

标签 java mongodb

我正在执行一个循环和更新,类似于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以键 namevalue 作为参数。key 名称不能包含 . 运算符。这就是您收到错误的原因:

Invalid BSON field name field1.field2

关于Java、MongoDB : how to insert into subdocument's empty array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34444151/

相关文章:

node.js - 环回事件流跟踪服务器端模型中的更改

mongodb - Mongoose:为多个数组字段获取多个不同的值列表

java - 无法从 Firebase 获取用户名列表

java - 如何在 Java 中仅更改 ArrayList 中第一次出现的对象,忽略后续的重复项

java - 我的一些质数不是质数

java - 迭代器 - Spring MVC Controller 中的 java.util.NoSuchElementException

node.js - 在 Express 应用程序的默认 connect.sid 浏览器 cookie 上设置域

spring - MongoRepository 对比两列+Spring Data

python - 如何根据数组中的值对集合进行排序

java - 如何在 Java、Android 中下载 ImageView 的图像?