字段必须是BSONtypes的对象

我正在创build一个dynamic的filter对象来查询nodejs中的mongodb的数据。 然而,mongo抛出错误“无法parsingfilter对象,filter必须是BSONtypes的对象”。 这是我的参考function代码和日志的屏幕截图 。

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); }); } 

提前感谢。

你的filtervariables是一个数组,而不是一个对象, 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);