更新时如何更新数组的一个元素

时间:2014-11-22 16:10:41

标签: mongodb-query

我有一个类似以下的文档: enter image description here

你可以看到我有一个数组实体:{1,3,4}

现在我想在该数组中更改4到10并更新它,我有以下代码:

DBCollection coll = db.getCollection("test");
    BasicDBObject newDocument = new BasicDBObject();
    BasicDBObject searchQuery = new BasicDBObject().append("time", "20141105230000");

    coll.update(searchQuery, newDocument);
    String[] str = { "1", "3", "10" };
    DBObject updateMatchingElem = new BasicDBObject("$set",
            new BasicDBObject().append("entity", str));
    coll.update(searchQuery, updateMatchingElem);

但这种方式不是一个好方法,因为我有点删除实体,然后再次插入整个数组。无论如何,我可以改变一个元素,如4到10?

1 个答案:

答案 0 :(得分:2)

  

现在我想在该数组中更改4到10并更新它

您可以使用$位置运算符以下列方式执行此操作。

 //db.collection.update({"entity":4},{$set:{"entity.$":10}})
  DBObject find = new BasicDBObject( "entity", 4);
  DBObject set = new BasicDBObject( "entity.$", 10);
  DBObject update = new BasicDBObject().append("$set", set);
  coll.update(find, update);

请注意,即使数组中还有其他匹配元素,您最多也只能更新一个匹配的数组元素。例如,如果数组中有两个4s,则只会更新第一个出现的4个。这就是位置操作员的工作方式。

每当您在更新查询中使用位置运算符时,查找查询必须包含查询的find部分中的字段。