gpt4 book ai didi

arrays - 字段必须是 BSON 类型的对象

转载 作者:可可西里 更新时间:2023-11-01 09:39:14 26 4
gpt4 key购买 nike

我正在创建一个动态过滤器对象,用于在 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);
});
}

非常感谢。

最佳答案

你的 filter变量是一个数组,而不是一个对象和一个 find() query 接受一个对象,而不是一个数组。你的决赛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);

关于arrays - 字段必须是 BSON 类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41891642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com