【发布时间】:2016-06-17 22:57:41
【问题描述】:
我有类似的数据库;
{"_id" : 1 , children: ["2", "123", "5"]}
我想在 children 数组中插入一个元素。当您知道索引时,这很容易。 $position 可用于此目的。喜欢;
db.module_menu.update({"_id" : "1"} ,
{$push : {"children" : {
$each : ["12"] , $position : 1}}});
但是假设我不知道位置索引,我知道我想要插入的元素的值。
我有value: 12 和我想在之后插入的值。 insertAfter: 2
结果应该是这样的;
{"_id" : 1, text: "" , children: ["2","12", "123", "5"]}
我该怎么做?
遍历子数组中的每个元素,找到值的索引,然后使用 $position 插入值。这是唯一的方法吗?
【问题讨论】:
-
你可以试试$addToSet
-
$addToSet 可能无法保持数组顺序
-
$addToSet 和 $push 一样吗?它添加到集合的末尾。我错了吗?
-
不,它们在这一点上是不同的:$addToSet 仅确保没有重复的项目添加到集合中,并且不会影响现有的重复元素。 $addToSet 不保证修改集中元素的特定顺序。