javascript - 如何将数据附加到 mongodb 中的对象属性

标签 javascript node.js mongodb mongoose

我想向 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/

相关文章:

linux - Mongodb 停止工作 : Aborted (core dumped)

javascript - 组合两个变量

javascript - 使用 JS/Ajax API 将通知标记为已读

node.js - 添加 webpack 时 react 项目依赖错误

javascript - node.js process.stdout.write 类型错误

mongodb - 运行 mongodump 后我得到一个空目录

javascript - 返回 mysql 查询的结果。最终返回 undefined

javascript - React Dragula 给出 "Failed to compile"和 "unexpected"错误

node.js - 如何通过 Geowithin 从 mongodb 获取匹配的子文档?

python - “pip install pymongo”停止工作