Sha*_*alu 12 mongodb mongodb-query mongo-java
我有一份文件---
Employees:[
{
name:"abc",
contact:"123",
email:"xyz@gmail.com"
},
{
name:"efg",
contact:"456",
email:"efg@gmail.com"
},
{
name:"hij",
contact:"789",
email:"hij@gmail.com"
}
]
Run Code Online (Sandbox Code Playgroud)
对于列表中的所有键名,我需要使用value ="abc"更新名称.
我试过更新像
db.collection.update(
{ "_id" : ObjectId("5308595e3256e758757b4d2f") },
{ "$set": { "Employees.name " : "abc" } }
);
Run Code Online (Sandbox Code Playgroud)
但是得到错误:不能使用部件(Employees of Employees.name)来遍历元素.
Nei*_*unn 31
它们在一个数组中,因此这就是您当前语句不起作用的原因.您有几个选项可以执行此操作,因为没有简单的语句可以执行此操作.
1.您知道数组中有多少元素,因此请使用"点符号"明确设置它们
db.collection.update(
{ "_id" : ObjectId("5308595e3256e758757b4d2f") },
{
"$set": {
"Employees.0.name " : "abc",
"Employees.1.name " : "abc",
"Employees.2.name " : "abc"
}
}
);
Run Code Online (Sandbox Code Playgroud)
2.您不知道但是准备发出此更新,直到返回的"已修改"文档变为0.然后您可以$在更新中使用位置运算符,但这将始终只匹配一个元素:
db.collection.update(
{
"_id" : ObjectId("5308595e3256e758757b4d2f"),
"Employees.name": { "$ne": "abc" }
},
{
"$set": {
"Employees.$.name " : "abc"
}
}
);
Run Code Online (Sandbox Code Playgroud)
3.检索文档并更新代码中的所有数组成员:
var doc = db.collection.findOne({
"_id": ObjectId("5308595e3256e758757b4d2f")
});
doc.Employee.forEach(function(emp) {
emp.name = "abc";
});
db.collection.update(
{ "_id": doc._id },
{ "$set": { "Employee": doc.Employeee } }
)
Run Code Online (Sandbox Code Playgroud)
这些是基本方法并且这样做,以及一些实际示例,说明为什么目前无法在单个语句中完成更新每个数组成员字段.
| 归档时间: |
|
| 查看次数: |
11085 次 |
| 最近记录: |