使用 Mongoose 更新对象数组的最佳方法?
Posted
技术标签:
【中文标题】使用 Mongoose 更新对象数组的最佳方法?【英文标题】:Best way to use Mongoose to update an Array of Objects? 【发布时间】: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 或循环是要走的路吗?
任何想法
【问题讨论】:
【参考方案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)
)
【讨论】:
以上是关于使用 Mongoose 更新对象数组的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何用mongoose更新这个文档中的数组中的对象中的数组里的值?
使用 mongoose 在 mongoDb 中更新数组内的对象 [重复]