最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 2浏览 0评论

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

我想发送请求到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对象与新的对象进行交换。

回答如下:

试试这个:

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

顺便说一句,这不是使用回调的正确方法。 节点中的回调通常使用以下签名调用:function(error, data) - 因此,在调用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);
    }
});

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

我想发送请求到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对象与新的对象进行交换。

回答如下:

试试这个:

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

顺便说一句,这不是使用回调的正确方法。 节点中的回调通常使用以下签名调用:function(error, data) - 因此,在调用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);
    }
});
发布评论

评论列表 (0)

  1. 暂无评论