Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor更新多个嵌套数组元素_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript Meteor更新多个嵌套数组元素

Javascript Meteor更新多个嵌套数组元素,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,考虑到上面的数组,是否可以在不调用每个forEach的情况下更新文档 例如,我目前正在做的是 let items = [ { name: "Choco", id: "12344", qty: 24, status: "open" }, { name: "Mils", id: "12346", qty: 5, status:

考虑到上面的数组,是否可以在不调用每个forEach的情况下更新文档

例如,我目前正在做的是

let items = [
     {
         name: "Choco",
         id: "12344",
         qty: 24,
         status: "open"
     },
     {
         name: "Mils",
         id: "12346",
         qty: 5,
         status: "open"
     },
     {
         name: "boom",
         id: "12345",
         qty: 10,
         status: "open"
     }
 ];

是否可以一次更新整个阵列而不创建新的mongo db事务

您可以读取所有订单:

  _.each(items, function( item ) {
Orders.update({_id: doc.orderId, "items.id": item.id},
                   {
                     "$set": {
                       'items.$.status': item.status,
                       'items.$.qty': item.qty,
                     }
                   })
})
然后使用新数据调整
顺序。项目
,然后在单个操作中更新:


update({u id:doc.orderId},{“$set”:{items:order.items})

我发现这是在问同样的问题-。从我所能找到的情况来看,你做的似乎是正确的(从来没有必要这样做)。但这是有道理的,你如何在不知道数组长度的情况下更新数组中的所有位置?为什么我需要知道数组的长度?这是一个更具哲学意义的问题。当您说“mongo,更新阵列的所有位置”时,mongo如何知道阵列中有多少个位置?记住,这个长度很可能不是一成不变的。因此,您首先必须获得数组的长度,然后从中循环遍历它(正如您在示例中所做的那样)。
 var order = Orders.findOne({_id: doc.orderId});