Javascript Meteor更新多个嵌套数组元素
考虑到上面的数组,是否可以在不调用每个forEach的情况下更新文档 例如,我目前正在做的是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:
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});