使用Mongoose在子文档数组中查找项目

时间:2014-08-25 17:48:46

标签: node.js mongodb mongoose mean-stack

我正在尝试向MessageBoard模型添加一个实例方法,告诉我某个用户是否是该MessageBoard的成员。

MessageBoard架构包含

members: [{
    type: Schema.Types.ObjectId
    ref: 'User'
}]

但我的实例方法......

MessageBoardSchema.methods.isUserMember = function(user) {
    return (this.members.id(user));
};

...告诉我,方法id在对象this.members上不存在。

我无法在其他类似的问题中找到解决方案,因为我在这里使用的是引用而不是嵌套的Schema。

1 个答案:

答案 0 :(得分:1)

id方法适用于您在成员数组中包含真实文档的嵌入式文档;你在this.members中拥有的是一个ObjecIds数组。我建议你使用underscore.js

如果用户确实是user_id:

MessageBoardSchema.methods.isUserMember = function(user) {
    var user_found = _.any(this.members, function(member){
         // Use toString() if you are dealing with ObjectIds since
         // new ObjectId("53fba4eb816bc772107552f0")==new ObjectId("53fba4eb816bc772107552f0")
         // outputs false
         return this.members.id.toString() == user.toString();
    });
    return user_found;
};

如果用户确实是用户:

MessageBoardSchema.methods.isUserMember = function(user) {
    var user_found = _.any(this.members, function(member){
         // Use toString() if you are dealing with ObjectIds as explained
         return this.members.id.toString() == user.id.toString();
    });
    return user_found;
};