我有以下情况。我需要基于某些参数构建猫鼬查询。
即如果通过了这样的对象
{
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
这样的三元运算符不起作用,就像在action
为null
的DB中搜索条目一样。
以编程方式建立查询对象:
var query = {
player: 'player'
};
if (obj.action) {
query.action = obj.action;
}
Entry.find(query).exec(function(err, res){
console.log(res);
});
如果有人遇到相同的问题,这是我的解决方法:
var query = {
player: 'player'
};
Entry.find({
player: query.player,
action: (query.action) ? query.action:/.*/
}).
exec(function(err, res){
console.log(res);
});
使用ES6,您可以像这样使用splat和三进制执行此操作:
Entry.find({
player: obj.player,
...obj.action ? { action: obj.action } : {}
})
.exec(function(err, res){
console.log(res);
});