【问题标题】:how to find and update objects in an array in mongoDb arrays?如何在 mongoDb 数组中查找和更新数组中的对象?
【发布时间】:2022-03-01 20:59:19
【问题描述】:

这是 Mongo 数据库集合

{
"_id": "62035cd8a76fcc0e09f46c22",
"particulars":[
{
                "serialNo": 1,
                "item": "desk",
                "link": "http//",
                "images": "http//",
                "quantity": 13,
                "unitPrice": 100,
                "amount": 1300
            },
            {
                "serialNo": 2,
                "item": "desk",
                "link": "http//",
                "images": "http//",
                "quantity": 13,
                "unitPrice": 100,
                "amount": 1300
            },
            {
                "serialNo": 3,
                "item": "desk",
                "link": "http//",
                "images": "http//",
                "quantity": 13,
                "unitPrice": 100,
                "amount": 1300
            }
]
}

前端的数组是这样的

procurement_details:[
{
                "serialNo": 1,
                "item": "ac",
                "link": "http//",
                "images": "http//",
                "quantity": 1,
                "unitPrice": 100,
                "amount": 100
            },
            {
                "serialNo": 2,
                "item": "fan",
                "link": "http//",
                "images": "http//",
                "quantity": 1,
                "unitPrice": 100,
                "amount": 100
            }
]

我想要的输出。需要将匹配的serialNo对象特别替换为具体对象

particulars:[
{
                "serialNo": 1,
                "item": "ac",
                "link": "http//",
                "images": "http//",
                "quantity": 1,
                "unitPrice": 100,
                "amount": 100
            },
            {
                "serialNo": 2,
                "item": "fan",
                "link": "http//",
                "images": "http//",
                "quantity": 1,
                "unitPrice": 100,
                "amount": 100
            },
            {
                "serialNo": 3,
                "item": "desk",
                "link": "http//",
                "images": "http//",
                "quantity": 13,
                "unitPrice": 100,
                "amount": 1300
            }
]

我需要用来自progression_details 的关于serialNo.的新对象替换具体的对象。所以任何人都可以帮助我解决这个问题并且我正在使用nodejs 和mongoClient。

【问题讨论】:

  • 您可能必须遍历前端数组,并为每个对象对集合中的相应文档执行更新操作。您还可以考虑使用 Bulk Write 操作 - 这样您就可以将所有更新作为单个数据库调用提交。
  • 你需要保留元素的顺序吗?
  • 不。顺序无关紧要。

标签: node.js arrays mongodb aggregation-framework


【解决方案1】:

var bulk=await ticket.initializeOrderedBulkOp()

   for(procurement_detail of procurement_details){
    const resultt=await tickets.find({"_id":mongodb.ObjectId(ticketId),"particulars.serialNo":procurement_detail.serialNo},{projection:{"particulars.$":1,_id:0}}).toArray()
    console.log("resultts",resultt);
    await bulk.find({"_id":mongodb.ObjectId(ticketId),"particulars.serialNo":procurement_detail.serialNo}).update({
     
            $set:{"particulars.$":procurement_detail},
            $push:{ticketHistory:{$each:resultt[0].particulars}}
            
        })

    }
   

await bulk.execute()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多