Lin*_*orn 15 mongodb nosql pymongo
我有以下文件:
[{
"_id":1,
"name":"john",
"position":1
},
{"_id":2,
"name":"bob",
"position":2
},
{"_id":3,
"name":"tom",
"position":3
}]
Run Code Online (Sandbox Code Playgroud)
在UI中,用户可以改变项目的位置(例如,将Bob移动到第一位置,john获得位置2,tom-位置3).有没有办法一次更新所有文件中的所有职位?
Der*_*ick 25
您无法使用MongoDB查询一次更新两个文档.您将始终必须在两个查询中执行此操作.您当然可以将字段的值设置为相同的值,或者使用相同的数字递增,但是您不能使用相同的查询在MongoDB中执行两个不同的更新.
从 mongodb 4.2 开始,您可以使用 $set 运算符在更新中使用管道
由于聚合管道中有许多运算符,现在有很多可能的方法,尽管我提供了其中之一
exports.updateDisplayOrder = async keyValPairArr => {
try {
let data = await ContestModel.collection.update(
{ _id: { $in: keyValPairArr.map(o => o.id) } },
[{
$set: {
displayOrder: {
$let: {
vars: { obj: { $arrayElemAt: [{ $filter: { input: keyValPairArr, as: "kvpa", cond: { $eq: ["$$kvpa.id", "$_id"] } } }, 0] } },
in:"$$obj.displayOrder"
}
}
}
}],
{ runValidators: true, multi: true }
)
return data;
} catch (error) {
throw error;
}
}
Run Code Online (Sandbox Code Playgroud)
示例键值对是:[{"id":"5e7643d436963c21f14582ee","displayOrder":9}, {"id":"5e7643e736963c21f14582ef","displayOrder":4}]
| 归档时间: |
|
| 查看次数: |
9728 次 |
| 最近记录: |