gpt4 book ai didi

javascript - 更新 MongoDB 数组中的多个值

转载 作者:太空宇宙 更新时间:2023-11-04 00:52:43 25 4
gpt4 key购买 nike

我收到一个 jsonObject 并想要执行 Mongo-DB 更新:

jsonObject:"tablename":"1","inventar":[{"ean":"802.6180.222"},{"ean":"657.7412.878"}]}

现有文档(缩短):

"tablename": "1",
"accepted": false,
"inventar": [
{
"ean": "802.6180.222",
"accepted": "0"
},
{
"ean": "657.7412.878",
"accepted": "0"
}
],

我需要将数组中的每个对象(位于 invetar-jsonObject 中)的接受值设置为“1”。

代码:

app.post('/in_accept', function(request,response){
var jsonString=request.body.json;
var jsonObj = JSON.parse(jsonString);
var InUser = jsonObj.in_user;
var InDate = jsonObj.in_date;
var inventar = jsonObj.inventar; //is an Array
var tablename = jsonObj.tablename;
console.log(inventar);
var query = {"tablename": tablename};
var update = {"accepted": true, CODE FOR UPDATING INVENTAR};
var options = {"upsert": false, "new": true};
Move.findOneAndUpdate(query, update, options,
function(err,Move) {
console.log( Move );
});
response.json({"success": true});
});

我知道 mongoDB 提供了运算符“each”,但我坚持使用整个语法。对于每个“ean”,可接受的值应设置为“1”。

谢谢

最佳答案

除了通过 .findOne() 或变体检索对象,然后在代码中进行修改并调用 .save() 之外,唯一真正“理智”的方法可以做到这一点(这不被认为是“理智的”,因为并发问题只会使这种方法变得“精神上的”),是执行“多次”更新,或者本质上是为您想要更改的每个数组成员执行一次更新。

您的“最佳”方法是立即进入核心驱动程序并访问 Bulk Operations API方法:

var input = { "tablename":"1","inventar":[{"ean":"802.6180.222"},{"ean":"657.7412.878"}]},
bulk = Move.collection.initializeOrderedBulkOp();

// Build the statements
input.inventar.forEach(function(inventar) {
bulk.find({
"tablename": input.tablename,
"inventar.ean": inventar.ean
}).updateOne({
"$set": { "inventar.$.accepted": 1 }
});
});

// Then execute
bulk.execute(function(err,result) {
if (!err) {
response.json({ "sucess": true })
} else {
// handle error
}
})

这可以确保两个请求在一个请求中同时发送到服务器,并且只有一个响应。

.find() 中的每个“查询”都会匹配数组中的一个元素,并通过 p ositional $ operator 返回它的“索引”值。 ,在方法的“更新”部分中使用 $set匹配索引位置处的值。

关于javascript - 更新 MongoDB 数组中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31626145/

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