猫鼬可选搜索查询参数?

问题描述 投票:9回答:3

我有以下情况。我需要基于某些参数构建猫鼬查询。

即如果通过了这样的对象

{
    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的DB中搜索条目一样。

node.js mongodb mongoose
3个回答
21
投票

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

var query = {
    player: 'player'
};

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

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

3
投票

如果有人遇到相同的问题,这是我的解决方法:

var query = {
    player: 'player'
};

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

0
投票

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

Entry.find({
  player: obj.player,
  ...obj.action ? { action: obj.action } : {}
})
.exec(function(err, res){
    console.log(res);
});
© www.soinside.com 2019 - 2024. All rights reserved.