[英]How to set specific property value with another property value in a javascript nested object array?
[英]How to set an property of a specific object in an array? mongodb
我有一个mongodb文档,用于project
对象:
{
members: [
{ _id: ObjectId(1),
active: true },
{ _id: ObjectId(2),
active: false }
]
}
我想更改project.members[1].active = true
,而仅在初始查询期间知道ObjectId(2)
。 有没有一种方法,而无需使用findOne
并手动循环遍历成员数组并检查ObjectId的等效性?
使用http://docs.mongodb.org/manual/reference/operator/update/positional/ ,我知道了。
db.collection('projects').findAndModify(
{ // Query
"_id": ObjectId(id),
"members._id": ObjectId(user_id)
},
[[]], // Ordering
{ // Update parameters
$set: { "members.$.active": true }
},
{new: true}, // Options
function(err, project) {
// do stuff
});
由于$位置运算符选择了第一个查询匹配项,因此它将仅为数组中的该对象$set
active属性。
$pull
和$push
当前不能同时使用,但正在考虑中 。 "err": "Field name duplication not allowed with modifiers"
我想我可以使用$pull
和$push
来实现所需的功能。
db.collection('projects').findAndModify(
{ // Query
"_id": ObjectId(id),
"members": { $elemMatch: { _id: ObjectId(user_id) } } },
[[]], // Ordering
{ // Update parameters
$pull: { "members": { $elemMatch: { _id: ObjectId(user_id) } } },
$push: { "members": ObjectId(user_id), active: true }
},
{new: true}, // Options
function(err, project) {
// do stuff
});
查询的“成员”行是可选的-添加此行将限制更新,以便仅更改已在members
数组中的用户。 如果将其删除,则运行该命令将覆盖或创建一个新成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.