从Mongoose中的嵌套数组中提取值

时间:2013-01-16 17:25:37

标签: node.js mongodb mongoose

我第一次与Mongoose合作,我正在努力完成一项似乎是一项简单的任务。我有一个包含clients属性的用户文档,该属性由一组客户端ID组成。例如,我的文档如下所示:

{
  email: "nick@movementstrategy.com",
  password: "$2a$10$xZVzMYgyoyT.biOMDrBlRe3HNHY5A6lXga6uc8b/cnIAX/khQ7ep2",
  modified: ISODate("2013-01-16T00:13:56.894Z"),
  created: ISODate("2013-01-16T00:13:56.894Z"),
  _id: ObjectId("50f5f0c4d6bbbcc6ce000002"),
  clients: [
    "50f6e118e0ccf9a1e9000001",
    "50f6e12be0ccf9a1e9000002"
  ],
  __v: 0
}

当我调用remove();

时,我创建了一个中间件来删除客户端的依赖项
clientSchema.pre('remove', function(next) {

    Sweepstakes.remove({client_id: this._id}).exec();
    Submission.remove({client_id: this._id}).exec();

    // find users with this._id present in clients, and remove from array

    next();

});

现在,我只需找到clients中存在客户端ID的所有用户,删除ID,然后更新用户。

我知道我可以轻松查询id存在的所有用户,然后循环并单独保存每个用户......但这似乎效率低下,我的直觉告诉我有更好的方法来实现我正在努力 - 只是很难在文档中找到它。

使用Mongoose执行此操作的最有效方法是什么?

1 个答案:

答案 0 :(得分:2)

可能是这样的:

Users.update({condition}, {$pull : { clients: this._id} }, function(err, numAffected) {
    //handle errors and whatever
    next();
});

您可以将clients : {$in : [this._id]}添加为condition以限制更新。