【问题标题】:Best way to use Mongoose to update an Array of Objects?使用 Mongoose 更新对象数组的最佳方法?
【发布时间】:2021-05-29 05:47:09
【问题描述】:

我的 req.body 就是这个,它来自我的前端,所以它是一个数组中的几个对象,id 喜欢根据匹配但页面已更改的记录进行更新。

[
[0]   {
[0]     _id: '60393a58c772c12724aa636e',
[0]     title: 'newTitle2',
[0]     page: '8',
[0]     book: '010',
[0]     __v: 0
[0]   },
[0]   {
[0]     _id: '60394e08f6e0ad0bb077e0bc',
[0]     title: 'newTitle3',
[0]     page: '123',
[0]     book: '099',
[0]     __v: 0
[0]   }
[0] ]

我的路线是这样的

router.post("/dataSend", async(req, res) => {

let { title, page, book} = req.body;

console.log(req.body)
const filter = { title };
const update = { page};

let doc = await Data.findOneAndUpdate({title:req.body[0].title},{page: req.body[0].page});

res.send(doc)
})

因此,如果我用 mongoose 指定我想更新 [0] 第一个数组,但我想更新所有内容,我不确定 .map 或 forEach 或循环是要走的路吗?

任何想法

【问题讨论】:

    标签: javascript arrays reactjs mongodb mongoose


    【解决方案1】:

    在这种情况下,我认为 bulkWrite (docs) 比在循环中调用 findOneAndUpdate 是更好的选择,所以你不要发送您对 Mongo 的更新一一。您可以映射您的更新操作并分批发送。示例请参考以下sn-p:

    router.post("/dataSend", async(req, res) => {
      const records = req.body
    
      const updateOps = records.map(record => {
        const updateOp = {
          'updateOne': {
            'filter': {
              'title': record.title,
            },
            'update': {
              'page': record.page
            },
          }
        }
        
        return updateOp
      })
    
    
      const result = await Data.bulkWrite(updateOps)
    
      res.send(result)
    })

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 2019-12-15
      • 2019-05-16
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多