NodeJS字符串命令过滤Mongodb中的数据然后MongoError:$或/ $和/ $条目需要是完整对象

时间:2017-07-02 16:17:11

标签: node.js mongodb

我使用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]工作?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

通过这种方式定义jobjvar 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
    }
);