我正在创建一个动态过滤器对象,用于在nodejs中查询来自mongodb的数据。但是mongo抛出错误"无法解析过滤器对象,过滤器必须是BSON类型对象"。这是我的参考函数代码和screen shot of logs。
function GetDeviceByFilter(args, cb) {
var query = args.qs;
var andQry = [];
var orQry = [];
var type = parseInt(query.type);
try {
if(type === uType.s){
andQry.push({sel: parseInt(query.idx)});
if(query.isSold === "0"){
orQry.push({uid: {$exists: false}})
orQry.push({uid: 0});
orQry.push({uid: null});
} else if(query.isSold === "1"){
orQry.push({uid : {$gt: 0}});
}
} else if(type === uType.a){
andQry.push({admn: parseInt(query.idx)});
if(query.isSold === "0"){
orQry.push({sel: {$exists: false}})
orQry.push({sel: 0});
orQry.push({sel: null});
} else if(query.isSold === "1"){
orQry.push({sid : {$gt: 0}});
}
}
logger.debug("And filter ", JSON.stringify(andQry));
logger.debug("or filter ", JSON.stringify(orQry));
} catch (e) {
logger.error(e);
}
var filter = [];
filter.push({$and: andQry});// = [$and : {andQry}, {$or: orQry}];
logger.debug("filter : ",filter);
var projections = {
uuid: 1,
mac: 1,
sim: 1,
imei: 1,
_id: 0
};
dbClient.FindDocFieldsByFilter(devCollection, filter, projections, 0,
function(e, d) {
if(e) logger.error(e)
cb(d, retCode.ok);
});
}
提前感谢。
答案 0 :(得分:2)
您的filter
变量是一个数组,而不是一个对象,find()
查询接受一个对象,而不是一个数组。您的最终filter
对象应具有此结构,例如
var filter = {
"$and": [
{ sel: parseInt(query.idx) },
{ admn: parseInt(query.idx)}
],
"$or": [
{ uid: {$exists: false} },
{ uid: 0 },
{ uid: null}
]
}
所以你需要改变部分
var filter = [];
filter.push({$and: andQry});// = [$and : {andQry}, {$or: orQry}];
logger.debug("filter : ",filter);
到
var filter = {};
filter["$and"] = andQry;
filter["$or"] = orQry;
logger.debug("filter : ",filter);
答案 1 :(得分:0)
使用Find()关键字查找特定日期范围内的期望值以获取输出,使用All()获取所有列出的输出数组
@GetMapping(value = "/example" , produces = MediaType.APPLICATION_JSON_VALUE)
public void example(){
//do x when mycontroller.environmentvariable.enebled = true
}
@GetMapping(value = "/example" , produces = MediaType.APPLICATION_JSON_VALUE)
public void example(){
//do y when mycontroller.environmentvariable.enebled = false
}