我有以下情况。 我需要根据某些参数构建一个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
之类的三元运算符不起作用,在action
为null
的数据库中搜索条目也不起作用。
答案 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);
});