繁体   English   中英

如何设置数组中特定对象的属性? mongodb

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM