【发布时间】:2017-05-23 18:10:57
【问题描述】:
我正在尝试使用“$”来更新列表中的某个项目。项目由 firstName 和 lastName 共同确定,在这种情况下,firstName + lastName 组合是唯一的。
这是我的文件
{
"_id" : ObjectId("592403125ec4f65fb02e36a0"),
"friends" : [
{
"age" : 30.0,
"fname" : "qiang",
"lname" : "he"
},
{
"age" : 31.0,
"fname" : "deng",
"lname" : "pan"
},
{
"age" : 22.0,
"fname" : "xiong",
"lname" : "lan"
},
{
"age" : 23.0,
"fname" : "qiang",
"lname" : "lan"
}
]
}
所以我正在尝试更改强兰的年龄,也就是列表中的第 3 项。但他的名字与项目 0 相同,姓氏与项目 2 相同。我使用的代码是:
db.getCollection('test').update({'friends.fname': 'qiang', 'friends.lname': 'lan'}, {$set:{'friends.$.age': 50}})
这段代码并没有改变强澜的年龄,而是将0强河的年龄改为50岁,这是我的一个术语中最早的匹配。所以这些术语实际上被视为 OR,而不是 AND。
我知道这可以通过添加一个等于 firstName + lastName 的 fullName 字段来解决,并在更新时匹配 fullName。我只是想弄清楚,“$”是故意设计的,还是我用错了?
谢谢!
【问题讨论】:
标签: mongodb mongodb-query