如何查找id在一个数组中的所有记录,或另一个id在另一个数组中?

时间:2014-11-06 02:17:25

标签: mongodb mongoose

我需要执行一个返回所有结果的查询,其中id或id数组中的id数组与另一个id或id数组在另一个id数组中。也许一个例子可以更好地解释我正在尝试做的事情:

架构:

var somethingSchema = mongoose.Schema({
space_id : String,
title : String,
created : {
    type: Date,
    default: Date.now
},
visibility : {
    groups : [{
        type : String,
        ref : 'Groups'
    }],
    users : [{
        type : String,
        ref : 'User'
    }]
}

});

查询:

something.find({
    space_id: req.user.space_id,
    $and: [
        { $or: [{ "visibility.groups": { $in: groups } }] },
        { $or: [{ "visibility.users": { $in: users } }] }
    ]
    }, function (err, data) {
        return res.json(data);
    });

在此示例中,groupsusers都是ID数组。上面的查询无效。它总是返回一个空数组。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您应该在 $or数组中将所有子句包含在OR中:

something.find({
    space_id: req.user.space_id,
    $or: [{ "visibility.groups": { $in: groups } }, 
          { "visibility.users": { $in: users } }]
}, function (err, data) {
    return res.json(data);
});

其转换为:查找匹配space_id并且visibility.groups中的groups值或visibility.users中的users值的所有文档。< / p>