我使用NodeJS和Mongodb。我试图通过NodeJS进行查询,我发现一些问题太难修复了。
代码是在NodeJS上创建命令查询
function DeleteItem(db, data) {
var jobj = "{'Item_ID':1},{'Item_ID':2}";
db.collection('P_Item').update(
{
$and: [{ 'Shop_ID': data.shopid }],
$or: [jobj]
},
{
$set: { 'Item_Delete': 1 }
},
{
'upsert': false
}
);
console.log("DeleteItem");
}

当功能正常工作时,我会收到以下错误:
UnhandledPromiseRejectionWarning:未处理的承诺拒绝 (拒绝ID:1):MongoError:$或/ $和/ $也不需要填写条目 对象
如果我在jobj
上编写代码替换,请不要使用var
有效的对象
function DeleteItem(db, data) {
db.collection('P_Item').update(
{
$and: [{ 'Shop_ID': data.shopid }],
$or: [{'Item_ID':1},{'Item_ID':2}]
},
{
$set: { 'Item_Delete': 1 }
},
{
'upsert': false
}
);
console.log("DeleteItem");
}

但我不想这样使用,因为jobj
每次都会得到数字对象不相等。
如何正确使用$or:[jobj]
工作?
感谢您的帮助!
答案 0 :(得分:0)
通过这种方式定义jobj
:var jobj = "{'Item_ID':1},{'Item_ID':2}";
,jobj的类型将为string
,但我们需要$or
的对象数组。
所以,如果jobj必须是字符串,你可以改变它的类型:
db.collection('P_Item').update(
{
$and: [{ 'Shop_ID': data.shopid }],
$or: JSON.parse("[" + jobj.replace(/'/g, '"') + "]")
},
{
$set: { 'Item_Delete': 1 }
},
{
'upsert': false
}
);