尝试使用以下方法更新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
答案 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);
};