MongoDB - 更新嵌套数组中的对象

9 浏览
0 Comments

MongoDB - 更新嵌套数组中的对象

我想要更新"friends.u.username"为"michael"的朋友的名字为"hello",我该如何操作?

0
0 Comments

在MongoDB中,如果需要更新嵌套数组中的对象,可以使用$set操作符。下面是一个使用$set操作符更新嵌套数组对象的示例:

> db.test.update({"friends.u._id":"eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

解决方法是使用$set操作符来更新嵌套数组中的对象。在上述示例中,我们通过查询条件`{"friends.u._id":"eGqDjAjjtYADbuSnn"}`找到了需要更新的对象,然后使用$set操作符将该对象的name属性更新为"hello",并使用`"friends.$.u.name"`来指定更新的位置。最后,更新操作会返回一个WriteResult对象,其中包含了更新的统计信息,例如nMatched表示匹配的文档数目,nModified表示修改的文档数目。

这种方法可以方便地更新嵌套数组中的对象,使得在数据操作中可以更加灵活地修改数据。

0
0 Comments

MongoDB - Update an object in nested Array

在这个问题中,我们需要更新嵌套数组中的一个对象。根据提供的信息,我们可以使用MongoDB的$set操作符和$位置操作符来实现这个目标。

我们的更新语句如下所示:

db.collection.update(
    { "friends.u.username": "michael" }, 
    { "$set": { "friends.$.u.name": "hello" } }
)

这个语句会根据条件"friends.u.username": "michael",找到匹配的数组元素,并更新其"friends.$.u.name"字段为"hello"。

如果我们需要同时更新多个匹配的元素,可以使用$[identifier]语法和arrayFilters选项。更新语句如下所示:

db.collection.update(
    { "friends.u.username": "michael" },
    { "$set": { "friends.$[elem].u.name": "hello" } },
    { 
      "arrayFilters": [{ "elem.u.username": "michael" }], 
      "multi": true 
    }
)

这个语句会更新所有匹配的元素,并将它们的"friends.$[elem].u.name"字段更新为"hello"。arrayFilters选项指定了过滤条件,multi选项设置为true表示更新所有匹配的文档。

然而,有用户反馈说这个方法在他们的环境中不起作用。他们尝试了不同的方法,包括使用0代替$,但都没有成功。

如果你有类似的问题,你可以尝试检查你的驱动程序和工具的兼容性。也可以参考一些类似的问题,如stackoverflow上的这个问题:https://stackoverflow.com/questions/4669178/46054172#46054172

总结一下,通过使用MongoDB的$set操作符和$位置操作符,我们可以更新嵌套数组中的对象。如果需要同时更新多个匹配的元素,可以使用$[identifier]语法和arrayFilters选项。但是,有时候这些方法可能会存在兼容性问题,需要进一步排查和解决。

0
0 Comments

MongoDB - 更新嵌套数组中的对象

问题出现的原因:需要更新嵌套数组中的对象,但不知道如何正确地执行更新操作。

解决方法:

1. 首先,检查数组中的当前值。

db.test.findOne({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{"friends.u.name":1})

2. 然后,执行更新命令。

db.test.update({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

3. 最后,再次检查结果,验证更新后的值。

db.test.findOne({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{"friends.u.name":1})

希望这能帮到你。

0