我有mongoDB内容如下:
[
{
"_id":{
"$oid":"57c6699711bd6a0976cabe8a"
},
"ID":"1111",
"FullName":"AAA",
"Category":[
{
"CategoryId":{
"$oid":"57c66ebedcba0f63c1ceea51"
},
"_id":{
"$oid":"57e38a8ad190ea1100649798"
},
"Value":[
{
"Name":""
}
]
},
{
"CategoryId":{
"$oid":"57c3df061eb1e59d3959cc40"
},
"_id":{
"$oid":"57e38a8ad190ea1100649797"
},
"Value":[
[
"111",
"XXXX",
"2005"
],
[
"1212",
"YYYY",
"2000"
],
[
"232323",
"ZZZZZ",
"1999"
]
]
}
]
},
{
"_id":{
"$oid":"57c6699711bd6a0976cabe8a"
},
"ID":"1111",
"FullName":"BBB",
"Category":[
{
"CategoryId":{
"$oid":"57c66ebedcba0f63c1ceea51"
},
"_id":{
"$oid":"57e38a8ad190ea1100649798"
},
"Value":[
{
"Name":""
}
]
},
{
"CategoryId":{
"$oid":"57c3df061eb1e59d3959cc40"
},
"_id":{
"$oid":"57e38a8ad190ea1100649797"
},
"Value":[
[
"4444",
"XXXX",
"2005"
],
[
"7777",
"GGGG",
"2000"
],
[
"8888",
"ZZZZZ",
"1999"
]
]
}
]
}
]
这里我有一个名为'Category'的数组,其中包含具有不同类别ID的对象。
我需要
选择特定类别ID - '57c3df061eb1e59d3959cc40'
从上面选择的类别中,我们得到'Value'数组
从Value数组需要查找第二个值是否等于'ZZZZZ'即。值[1] =='ZZZZZ'
现在,使用最后一个新值更新匹配的值数组
例如:
[
"232323",
"ZZZZZ",
"1999"
]
should be updated to
[
"232323",
"ZZZZZ",
"1999",
"update1"
]
and
[
"8888",
"ZZZZZ",
"1999"
]
should be updated to
[
"8888",
"ZZZZZ",
"1999",
"update1"
]
我试过如下:
resume.update({
"Category.CategoryId": new ObjectId('57c3df191eb1e59d3959cc43'),
"Category.Value.$.1": 'ZZZZZ'
},
{"$set": {"Category.Value.$.3": "update1"}
}, function(err, resData){
res.send(resData);
});
但是,没有任何更新。它有什么办法让这项工作。请帮助更新内部数组。
提前致谢。
答案 0 :(得分:0)
目前无法实现目标,因为您需要更新两个位置元素。 JIRA可以跟踪您想要的行为:https://jira.mongodb.org/browse/SERVER-831
这是一个问题,因为您需要匹配两个元素位置:
Category
CategoryId
元素
Value
数组数组中的Value
元素如果其中一个不是array
,那就可能了。
无论如何,你的update
尝试上面的错误。 IF 此功能是可行的(并且它不是!!! ),它可能是这样的:
db.resume.update(
{
Category: {
$elemMatch: {
CategoryId: ObjectId('57c3df061eb1e59d3959cc40'),
Value: {
$elemMatch: {
'1': 'ZZZZZ'
}
}
}
}
},
{
$push: {
'Category.$.Value.$': 'update1'
}
}
)
位置$
运算符应该在update
期间使用,而不是像find
那样使用,它将更新与查询匹配的第一个元素。
执行以上操作将返回错误:
在路径'类别。$。值。$'
中找到太多位置(即'$')元素
由于我在顶部解释了缺失的功能。 因此,当前(版本3.2)除非您更改架构,否则将无法执行此操作。