我需要执行一个返回所有结果的查询,其中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);
});
在此示例中,groups
和users
都是ID数组。上面的查询无效。它总是返回一个空数组。我做错了什么?
答案 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>