我有一个结构
{
"_id" : ObjectId("562dfb4c595028c9r74fda67"),
"office_id" : "123456",
"employee" : [
{
"status" : "declined",
"personId" : "123456",
"updated" : NumberLong("1428407042401")
}
]
}
这个办公室可以有多个人。如果我想更新该特定office_id下的所有人的员工状态,请说明"批准"。我正在尝试通过普通的mongo java我正在尝试的是使用查询构建器获取所有办公室ID,然后遍历列表并保存文档。我不满意我正在遵循的迭代方法(获取,迭代和保存)。请建议如果有其他方式。
答案 0 :(得分:3)
您可以使用$
positional operator:
db.collection.update(
{
"office_id" : "123456",
"employee.status": "declined"
},
{
"$set": { "employee.$.status": "approved" }
}
);
位置运算符从匹配查询的数组中保存元素的索引(在上面的情况下为0)。这意味着如果您事先知道元素的位置(在现实生活中几乎不可能),您只需将更新语句更改为:{"$set": {"employee.0.status": "approved"}}
。
请注意,$
位置操作员(暂时)仅更新第一个相关文档,此处有 JIRA 票证。
修改强>:
使用Java驱动程序,上述更新可能就像这样(未经测试):
BasicDBObject update = new BasicDBObject();
BasicDBObject query = new BasicDBObject();
query.put("office_id", "123456");
query.put("employee.status", "declined");
BasicDBObject set = new BasicDBObject("$set", update);
update.put(""employee.$.status", "approved");
collection.update(query, set);