[英]How to shift element from one array position to another in MongoDB with mongoose?
我在 MongoDB 中有一个对象数组,我正在将特定元素 id(即 1)从其位置移动到具有 id(即 2)的下方元素。 这样我们就可以得到 id 为 2 -> 1 -> 3 的元素。
const arr = [
{
id: 1,
name: 'foo'
},
{
id: 2,
name: 'bar'
},
{
id: 3,
name: 'zoo'
}
]
我所做的是使用 $pull 和 $push 但它提供了ConflictingUpdateOperators ,我不知道如何处理它。
updatedPlan = await Plan.findOneAndUpdate(
{ _id: req.params.id },
{
$pull: {
"arr": {
id: 1
}
},
$push: {
"arr" : {
$each: [{ id: 1, name: 'foo'}],
$position: 1
}
},
);
在 MongoDB 4.2 或更高版本中,您可以使用聚合管道更新文档。 在$range数组索引上使用简单的$map ,您可以对这些索引进行混洗并使用$arrayElemAt来构建新数组:
db.col.update({ _id: req.params.id }, [
{
$set: {
arr: {
$map: {
input: { $range: [ 0, { $size: "$arr" } ] },
in: {
$let: {
vars: {
newIndex: {
$switch: {
branches: [
{ case: { "$eq": [ "$$this", 0 ] }, then: 1 },
{ case: { "$lte": [ "$$this", 1 ] }, then: { $subtract: [ "$$this", 1 ] } },
],
default: "$$this"
}
}
},
in: {
$arrayElemAt: [ "$arr", "$$newIndex" ]
}
}
}
}
}
}
}
])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.