如何使用多个条件查找文档?

时间:2014-09-01 03:27:08

标签: node.js mongodb mongoose

我查看了其他帖子,似乎没有人解决我想要做的事情。我需要创建一个查询,搜索在数组中具有type_ids的所有记录,并且属于当前登录用户。这就是我所拥有的:

查询:

app.post('/photos', function(req, res) {
    Photos
        .find({
            'type_id': { $in: req.body.type_ids },
            $and : {'groups.users': { $in: req.user._id }}
        })
        .select('name size')
        .exec(function(err, data) {
            return res.json(data);
        });
});

架构:

var photoSchema = mongoose.Schema({
    name : String,
    size : String,
    type_id : String,
    created : {
        type: Date,
        default: Date.now
    },
    groups : {
        users : [],
        other : []
    }
});

我唯一可以工作的是以下查询:

app.post('/photos', function(req, res) {
    Photos
        .find({'type_id': { $in: req.body.type_ids }})
        .select('name size')
        .exec(function(err, data) {
            return res.json(data);
        });
});

但是,显然这不会起作用,因为我只希望特定用户获得这些结果。行$and : {'groups.users': { $in: req.user._id }}显然不起作用,但我不确定如何修复它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

"和"运算符隐含在查询中,因此很少需要$and。你可以使用:

{
    'type_id': { $in: req.body.type_ids },
    'groups.users': { $in: req.user._id }
}

虽然根据变量的名称,第二行听起来不对 - 你可能只想要'groups.users': req.user._id(你应该放弃$in)。

最后,使用$and的方法是给它一个数组:

{
    '$and': [
        { 'type_id': { $in: req.body.type_ids } },
        { 'groups.users': { $in: req.user._id } }
    ]
}

但就像我说的那样,这里没必要。