javascript - 使用 Mongoose 更新对象数组的最佳方法?
问题描述
我的 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 或循环是要走的路吗?
有任何想法吗
解决方案
在这种情况下,我认为(文档)findOneAndUpdate
不是循环调用,而是更好的选择,因此您不会将更新一一发送到 Mongo。您可以映射您的更新操作并分批发送。请参阅以下代码段以获取示例:bulkWrite
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)
})
推荐阅读
- c# - 当从文件夹运行进程时重命名/移动文件夹
- react-native - react-native-maps:animateToRegion 不适用于区域或初始区域?
- flutter - 为什么颤振本地通知会出现异常
- reactjs - Reactjs中,如何在项目中集成Cashfree UPI?
- vue.js - 单选后关闭多选下拉菜单
- parallel-processing - 使用 DataLoader 在工作人员之间手动拆分数据集
- reactjs - 我正在尝试使用 componentdidmount 功能
- android - 使用 Hilt 注入 LiveData 实例 - 好还是坏?
- r - 根据另一个数据框中的字符串数据对数据框中的行(带有字符串变量)进行分类
- javascript - 如何将地图对象设置为赛普拉斯结果 json 文件