当upsert = true时,更新不在子数组中插入对象

时间:2013-10-22 16:55:20

标签: mongodb mongoose mongo-java

我正在使用mongodb update方法和upsert = true。

我的数据如下:

{"my_id":"1",
"test_list":[{"test_id":1,"test_name":"pppp"}]}

现在我使用以下命令:

db.testcol.update({"my_id":1,"test_list.test_id":2},{"$set":{"test_list.$.test_name":"mmmm"}},true,true)

现在我想要一个新对象插入“test_list”,因为它不存在

但我收到了错误:

Cannot apply the positional operator without a corresponding query field containing an array.

我不能在我的操作中使用“插入”,因为我不知道数据是否是他们的并且字段需要更新,或者不是他们的并且需要插入(第一次)

1 个答案:

答案 0 :(得分:0)

Upserts适用于您希望更新生效的整个文档是否存在,而不仅仅是数组元素。对于数组元素,您可以使用$addToSet

db.testcol.update(
    {"my_id": "1"},
    {"$addToSet": {"test_list": {"test_id": 2, "test_name": "mmmm"}}})

如果匹配元素尚未存在,它只会将新元素添加到doc的test_list数组字段中。