在 Mongodb 数组中,有没有办法在特定元素位置之前/之后插入新元素
Posted
技术标签:
【中文标题】在 Mongodb 数组中,有没有办法在特定元素位置之前/之后插入新元素【英文标题】:In Mongodb array is there any way to insert a new element before/after a specific element position 【发布时间】:2015-06-14 10:05:07 【问题描述】:假设我有一个类似的文档
"_id" : 5,
"rows": [
"id" : "aab", "value":100,
"id" : "aac", "value":400,
"id" : "abc", "value":200,
"id" : "xyz", "value":300,
]
我需要在“rows”数组中插入一个新的子文档
"id" : "qwe", "value":300
元素位置之前
"id" : "abc", "value":200
我尝试了使用以下命令将元素插入特定位置的命令
db.collection.update(
"_id" : 5,
"rows.id": "abc"
,
'$push':
'rows':
'$each': [ "id" : "qwe", "value":300 ],
'$position': 2
)
它正在工作。但问题出在这里我必须指定
'$position': 2
这是一个静态值。
我的要求是在数组中的特定元素之前插入一个新元素。也就是说,位置可能是动态值。
有人可以帮忙吗?
【问题讨论】:
【参考方案1】:通过事先进行一些 javascript 操作,您可以使用 map 函数获取需要插入新元素的特定数组对象元素的索引。首先,使用集合上的 findOne()
方法从文档中获取行数组:
var rows = db.collection.findOne("_id": 5, "rows.id": "abc").rows,
pos = rows.map(function(e) return e.id; ).indexOf("abc");
然后在更新语句中使用变量pos
:
db.collection.update(
"_id" : 5,
"rows.id": "abc"
,
"$push":
"rows":
"$each": [ "id" : "qwe", "value":300 ],
"$position": pos
);
【讨论】:
以上是关于在 Mongodb 数组中,有没有办法在特定元素位置之前/之后插入新元素的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在不输入数组 [somenumber] 的情况下获取数组内的特定对象?