【发布时间】:2020-11-09 06:32:50
【问题描述】:
我有一个这样的数据库:
[
{
"universe":"comics",
"saga":[
{
"name":"x-men",
"characters":[
{
"character":"wolverine",
"picture":"618035022351.png"
},
{
"character":"cyclops",
"picture":"618035022352.png"
}
]
}
]
},
{
"universe":"dc",
"saga":[
{
"name":"spiderman",
"characters":[
{
"character":"venom",
"picture":"618035022353.png"
}
]
}
]
}
]
通过这段代码,我设法更新了数组中的一个对象。特别是character: wolverine的对象
db.mydb.findOneAndUpdate({
"universe": "comics",
"saga.name": "x-men",
"saga.characters.character": "wolverine"
}, {
$set: {
"saga.$[].characters.$[].character": "lobezno",
"saga.$[].characters.$[].picture": "618035022354.png",
}
}, {
new: false
}
)
它返回我所有的文档,我只需要匹配的文档
我想返回我已更新的对象,而不必对数据库进行更多查询。
注意
我被告知我的代码不能正常工作,显然我的查询更新了这个错误,我想知道如何修复它并获取与这些搜索条件匹配的对象。
换句话说,我怎样才能得到这个输出:
{
"character":"wolverine",
"picture":"618035022351.png"
}
在单个查询中使用过滤器
{
"universe": "comics",
"saga.name": "x-men",
"saga.characters.character": "wolverine"
}
我的 MongoDB 知识使我无法更正此问题。
【问题讨论】:
-
尝试提供 new:true 而不是 false。
-
不行,它会返回我所有的文档,我只需要匹配的文档
-
您可以尝试使用
projection参数 - 定义为“要返回的字段子集。” -
@prasad_ 我知道,虽然我不知道该怎么做,但我知道我应该使用 agreattions,但在这种情况下我正在更新......
-
(1) 您的更新语句看起来不正确 - 使用的语法需要
arrayFilters。 (2)$[]数组更新所有位置操作符更新数组的所有元素。要更新特定的数组元素,您需要使用$[id]位置过滤运算符或$位置运算符。 (3) 是的,你可以使用Updates with Aggregation Pipeline,我认为在投影的情况下可能没有区别。
标签: mongodb