nodejs model updateOne不会给出相同的结果

时间:2017-06-09 13:22:34

标签: node.js mongodb mongodb-query

尝试使用以下方法更新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

2 个答案:

答案 0 :(得分:0)

你知道在调用Api.updateOne时你传递的是字符串参数而不是json对象。

进行以下更改。

编辑:

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

答案 1 :(得分:0)

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

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