gpt4 book ai didi

node.js - 尝试将新数据传递给对象而不用express从nodejs替换mongoDB中的旧数据

转载 作者:太空宇宙 更新时间:2023-11-03 22:51:09 25 4
gpt4 key购买 nike

我正在尝试将新数据传递给对象,而不使用nodejs替换旧数据。我的 Mongodb 数据库(添加新数据之前)结构如下

{
"_id" : ObjectId("58fd05f7fb69f42d54fccd12"),
"Transaction" : {
"QRIDNumber6666" : {
"retailer" : "watson",
"discount" : "10%",
"tax" : "5%",
"Transaction Detail" : [
{
"quantity" : "1",
"pname" : "coca",
"price" : "3"
},
{
"quantity" : "3",
"pname" : "pepsi",
"price" : "5"
}
]
}
}
}

我想要实现的是在 Transaction 下添加另一个 QRIDNumber,例如:QRIDNumber 7777,与 QRIDNumber6666 相比,它具有不同的值但结构相同

我当前的尝试是在nodejs上使用以下代码

app.put('/contactlist/', function (req, res) {
var id = "58fd05f7fb69f42d54fccd12";
db.CollectionName.findAndModify({
query: {_id: mongojs.ObjectId(id)},
update: {$set: {Transaction: req.body}},
new: true});
});

注意:req.body 是要从我的 Controller 发送的 QRIDNumber7777 的详细信息和值。

我的代码的最终结果是它只是替换了“交易”(QRIDNumber6666)下的所有先前内容,并仅用新内容(QRIDNumber7777)替换了它。

我希望保留这两个数据。 “交易”下添加新内容,不删除旧内容

最佳答案

好吧,假设您在 req.body 中始终有一个带有 1 个键的对象。喜欢:

req.body = {"QRIDNumber7777": {...}}

首先,您需要知道 key 的名称:

const insertedTransactionName = Object.keys(req.body)[0]; // QRIDNumber7777

现在您可以更新文档而无需覆盖其他字段。

app.put('/contactlist/', function(req, res) {
var id = "58fd05f7fb69f42d54fccd12";
db.CollectionName.findAndModify({
query: {
_id: mongojs.ObjectId(id)
},
update: {
$set: {
[`Transaction.${insertedTransactionName}`]: req.body[insertedTransactionName]
}
},
new: true
});
});

注意这一行:

$set: {
[`Transaction.${insertedTransactionName}`]: req.body[insertedTransactionName]
}

您只需更新一个嵌套属性,而不是覆盖整个 Transaction 文档。因此 QRIDNumber6666 数据仍然保留。

关于node.js - 尝试将新数据传递给对象而不用express从nodejs替换mongoDB中的旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43576191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com