查询Mongoose中的ObjectIds数组

时间:2015-01-21 04:34:37

标签: mongoose

我正在尝试查询用户加入的群组列表。组架构包含有关该组的信息。在用户模式中,用户加入的组以及他们加入的日期。

var UserSchema = new Schema({
  email: String,
  groups : [{
      groupId : Schema.ObjectId,
      joined: {type: Date, default: Date.now}
  }],
  events : [Schema.ObjectId]
});

var GroupSchema = new Schema({
  title: String,
  admin: [Schema.ObjectId],
  about: String
})

//Assume that userId is valid (is a valid ObjectId)
User.findOne({_id : userId},function(err, user) {
    if (err){
      res.send(err);
    }

    // Grab events from group array and return result
    Group.find({_id : {$in : user['groups']._id}}, function(err, groups){

      res.json(groups);
    });

});

但是我得到了未定义的结果

这是用户文档的示例输出

{ _id: 54bf1ac6b4ff988e0b000003,
    email: 'poop@gmail.com',      
    __v: 0,
    groups: 
        [ { _id: 54bf1dc44fa35ec50f000006,
          joined: Tue Jan 20 2015 22:32:20 GMT-0500 (EST) },
          { _id: 54bf225a480f01b314000006,
          joined: Tue Jan 20 2015 22:51:54 GMT-0500 (EST) }
    ],
 }

所以基本上我正试图获得这样的列表

[ { _id: 54bf1dc44fa35ec50f000006,
    joined: Tue Jan 20 2015 22:32:20 GMT-0500 (EST),
    title: 'Poop',
    admin: none,
    about: 'stinky'
  },
  { _id: 54bf225a480f01b314000006,
    joined: Tue Jan 20 2015 22:51:54 GMT-0500 (EST) 
    title: 'Poop2',
    admin: none,
    about: 'stinky2'
  }
],

1 个答案:

答案 0 :(得分:0)

在这种情况下,user['groups']是一个组数组,因此它没有_id字段。

// Grab events from group array and return result
Group.find({_id : {$in : user['groups']._id}}, function(err, groups){

  res.json(groups);
});

尝试这样的事情:

Group.find({_id : {$in : user['groups'].map(function(group) { return group._id; })}}, function(err, groups){

  res.json(groups);
});