1

使用 Morphia,是否可以对嵌入在数组中的对象执行 saveOrUpdate / upsert 操作。

考虑以下文件:

{
_id : "abcd",
myArray : [{
        "key" : "areaTotal",
        "value" : "101.9",
        "label" : "Total area (municipality)"
    }, {
        "key" : "areaUrban",
        "value" : "803",
        "label" : "Total area (urban)"
    }, {
        "key" : "populationDensity",
        "value" : "15991",
        "label" : "Population desnsity"
    }
]
}

有没有一种干净的方法可以用另一个对象替换例如带有键“areaUrban”的数组元素,例如

{
        "key" : "areaUrban",
        "value" : "123",
        "label" : "a new label"
}

现在我在两个更新操作中首先删除,然后添加:

UpdateOperations<T> ops = createUpdateOperations().removeAll("myArray ", new BasicDBObject("key", "areaUrban")); 
update(createQuery().field("_id").equal(myObjId),ops);
UpdateOperations<T> ops2 = createUpdateOperations().add("myArray ", myReplacementObject); 
update(createQuery().field("_id").equal(myObjId),ops2);

哪个工作正常,但我可以只在一个更新操作中做到这一点(使用 morphia 或普通的 mongo java 驱动程序)?

此外,如果数组中最初不存在匹配对象,则应将 myReplacementObject 对象添加到数组中。

谢谢

4

1 回答 1

1

使用$ 位置运算符

db.test.update({_id: "abcd", "myArray.key": "areaUrban"}, {$set: {"myArray.$.value": 123, "myArray.$.label": "a new label"}})


[编辑] 正如 JohnnyHK 在评论中提到的,如果嵌套文档不存在,则不会对其进行更新。

于 2013-01-07T02:11:12.643 回答