我想向 mongodb 数据库发送请求。 例如我有这个对象:
{
id:"1",
requestType : {
"api1" : {count:12,firstTime:12},
"api2" : {count:6,firstTime:18}
}
}
通过“id”获取数据后,我想将另一行附加到“requestType”,例如“api3”:{count:56,firstTime:11}。 我期望的对象是:
{
id:"1",
requestType : {
"api1" : {count:12,firstTime:12},
"api2" : {count:6,firstTime:18},
"api3":{count:56,firstTime:11}
}
}
目前我正在使用 Mongoose 的这个查询:
apiAttemptsModel.findOneAndUpdate(query, {
$set: {
requestType : {"api3":{count:56,firstTime:11}}
}
}, {upsert: true, new: true}, function (err, row) {
if (err) {
callback('err is ' + err)
} else {
callback(row);
}
});
但是此代码将用新的 requestType 对象交换旧的 requestType 对象。
最佳答案
试试这个:
apiAttemptsModel.findOneAndUpdate(query, {
$set: {
"requestType.api3" : {count:56, firstTime:11}
}
}, {upsert: true, new: true}, function (err, row) {
if (err) {
callback('err is ' + err)
} else {
callback(row);
}
});
顺便说一句,这不是使用回调的正确方法。
Node 中的回调通常使用以下签名进行调用:
函数(错误,数据)
-
因此,当调用 callback(row);
时,此方法的用户可能会遇到错误,就像您在第 5 行的回调函数中所做的那样。
当没有发生错误时,第一个参数通常为 null
。
此外,调用callback('err is ' + err)
只会保留错误消息并丢弃其堆栈跟踪,因为错误已“转换”为字符串。
我会将您的代码转换为:
apiAttemptsModel.findOneAndUpdate(query, {
$set: {
"requestType.api3" : {count:56, firstTime:11}
}
}, {upsert: true, new: true}, function (err, row) {
if (err) {
callback(err)
} else {
callback(null, row);
}
});
关于javascript - 如何将数据附加到 mongodb 中的对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47975494/