Mongoose可选搜索查询参数?

时间:2015-08-13 17:50:39

标签: node.js mongodb mongoose

我有以下情况。 我需要根据某些参数构建一个mongoose查询(如果存在)。

即。如果这样的对象被传递

{
    player: "nickname",
    action: "capture"
}

执行以下搜索:

Entry.find({
    player: obj.player,
    action: obj.action
}).
    exec(function(err, res){
        console.log(res);
    });

如果我需要从搜索中排除“操作”,如果操作不在对象中,我该怎么办? 使用action: (obj.action) ? obj.action:null之类的三元运算符不起作用,在actionnull的数据库中搜索条目也不起作用。

3 个答案:

答案 0 :(得分:20)

以编程方式构建查询对象:

var query = {
    player: 'player'
};

if (obj.action) {
    query.action = obj.action;
}

Entry.find(query).exec(function(err, res){
    console.log(res);
});

答案 1 :(得分:3)

如果有人遇到同样的问题,我就是这样解决的:

var query = {
    player: 'player'
};

Entry.find({
    player: query.player,
    action: (query.action) ? query.action:/.*/
}).
    exec(function(err, res){
        console.log(res);
    });

答案 2 :(得分:0)

使用ES6,您可以使用splat和三进制执行此操作,

Entry.find({
  player: obj.player,
  ...obj.action ? { action: obj.action } : {}
})
.exec(function(err, res){
    console.log(res);
});