【问题标题】:nodejs model updateOne does NOT give same resultnodejs模型updateOne没有给出相同的结果
【发布时间】:2017-11-11 12:59:51
【问题描述】:

尝试使用以下方法更新 mongodb 中的文档:

module.exports.addAcc = function(id , acc, callback) {
    let strAcc  = escape(JSON.stringify(acc, null, 4));

    let pushAcc =  '{'+ ' $push :'+ '{ "pf.acc" : '  +strAcc + '}}' ;
    let query = '{ "userid": ' + id + '}'; 

    console.log('udpate <<',query,',' ,pushAcc, '>>');   <=====

    Api.updateOne(query, pushAcc, {upsert: false},  callback);

};

它确实给出了以下结果:

{
"ok": 0,
"n": 0,
"nModified": 0
}

当我捕捉到 console.log 行中的内容并在 Api.updateOne 行中替换它时,如下所示:

Api.updateOne({ "userid": 1197} , { $push :{ "pf.acc" : {"accid":1496998168,"accbr":65875}}}, {upsert: false}, callback);

有效!!

{
"n": 1,
"nModified": 1,
"ok": 1
}

知道为什么吗?

/KOul

【问题讨论】:

    标签: node.js mongodb mongodb-query


    【解决方案1】:

    您意识到当调用 Api.updateOne 时您传递的是字符串参数而不是 json 对象。

    进行以下更改。

    编辑:

    let pushAcc = {$push :{"pf.acc": strAcc}};
    let query = {"userid": id}; 
    Api.updateOne(query, pushAcc, {upsert: false},  callback);
    

    【讨论】:

    • 我得到了这个:SyntaxError: Unexpected token $ in JSON at position 2. 显然解析它不适合 $push
    • 我将查询和 pushAcc 设置为 json 格式,它就像一个魅力
    • 编辑了所需的更改。请接受该解决方案,如果它有效或上传您拥有的解决方案,以便其他寻找相同想法的人得到这个想法。
    【解决方案2】:

    正如我所说的,我是如何修改这段代码的:

    module.exports.addAcc = function(id , acc, callback) {
        let strAcc  = escape(JSON.stringify(acc, null, 4));
    
    
        let query = {
            "userid": id
        }
        let pushAcc = {
            $push : { "pf.acc" : strAcc }
        }
    
        console.log('udpate <<',query,',' ,pushAcc, '>>');
    
        Api.updateOne(query, pushAcc, {upsert: false},  callback);
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 2021-05-12
      • 1970-01-01
      相关资源
      最近更新 更多