Sur*_*ati 5 arrays json mongodb node.js mongodb-query
我正在创建一个动态过滤器对象,用于从 nodejs 中的 mongodb 查询数据。但是 mongo 抛出错误“无法解析过滤器对象,过滤器必须是 BSON 类型的对象”。这是我的参考函数代码和日志屏幕截图。
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);
});
}
Run Code Online (Sandbox Code Playgroud)
提前致谢。
您的filter变量是一个数组,而不是一个对象,并且find()查询接受一个对象,而不是一个数组。例如,您的最终filter对象应具有此结构
var filter = {
"$and": [
{ sel: parseInt(query.idx) },
{ admn: parseInt(query.idx)}
],
"$or": [
{ uid: {$exists: false} },
{ uid: 0 },
{ uid: null}
]
}
Run Code Online (Sandbox Code Playgroud)
所以你需要改变部分
var filter = [];
filter.push({$and: andQry});// = [$and : {andQry}, {$or: orQry}];
logger.debug("filter : ",filter);
Run Code Online (Sandbox Code Playgroud)
到
var filter = {};
filter["$and"] = andQry;
filter["$or"] = orQry;
logger.debug("filter : ",filter);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9925 次 |
| 最近记录: |