Arrays 你能用mongo$push prepend代替append吗?
当我执行mongo$push时,我希望在集合的开头添加push add,而不是追加到末尾 是否可以执行原子推送更新,将元素作为第一个元素而不是最后一个元素添加Arrays 你能用mongo$push prepend代替append吗?,arrays,mongodb,Arrays,Mongodb,当我执行mongo$push时,我希望在集合的开头添加push add,而不是追加到末尾 是否可以执行原子推送更新,将元素作为第一个元素而不是最后一个元素添加 2014年更新:。几天前,有人问了一个类似的问题。不幸的是,简短的回答是“否”,但此功能有一个开放的请求。 -“$push()到数组前面” 在另一个线程上还有更多信息和可能的解决方法:“使用MongoDB数组作为堆栈”—— 希望以上内容会有用,并帮助您找到一个可接受的解决方案 在mongo v2.2中测试,使用带$set的负索引作为前置
2014年更新:。几天前,有人问了一个类似的问题。不幸的是,简短的回答是“否”,但此功能有一个开放的请求。
-“$push()到数组前面” 在另一个线程上还有更多信息和可能的解决方法:“使用MongoDB数组作为堆栈”——
希望以上内容会有用,并帮助您找到一个可接受的解决方案 在mongo v2.2中测试,使用带$set的负索引作为前置索引:
> db.test.insert({'array': [4, 5, 6]})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"),
"array" : [ 4, 5, 6 ] }
//prepend 3
> db.test.update({"_id" : ObjectId("513ad0f8afdfe1e6736e49eb")},
{'$set': {'array.-1': 3}})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"),
"array" : [ 3, 4, 5, 6 ] }
//prepend 2
> db.test.update({"_id" : ObjectId("513ad0f8afdfe1e6736e49eb")},
{'$set': {'array.-1': 2}})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"),
"array" : [ 2, 3, 4, 5, 6 ] }
//prepend 1
> db.test.update({"_id" : ObjectId("513ad0f8afdfe1e6736e49eb")},
{'$set': {'array.-1': 1}})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"),
"array" : [ 1, 2, 3, 4, 5, 6 ] }
从MongoDB v2.5.3开始,有一个新的
$position
操作符,您可以将它与$each
操作符一起包含在$push
查询中,以指定数组中要插入值的位置
下面是docs页面中的一个示例,在数组索引2:处添加元素20和30:
db.students.update( { _id: 1 },
{ $push: { scores: {
$each: [ 20, 30 ],
$position: 2
}
}
}
)
参考资料:请参阅Aha的可能副本。看起来克里斯·肖恩赢了我一拳!我在发布之前没有看到评论。@Monkey:从v2.5.3开始,您可以使用
$push-$each-$position:0
语法。你能更新接受的答案吗?另外,由于这种语法很难理解,请提供帮助。有没有一种方法可以在数组开始时设置多个值?很好的解决方法。看起来Mongo2.6(稳定版)将包含一个非工作区。您如何在原子级上一次取消移动多个元素?顺便问一下,这个功能是否有文档记录?这仍然有效吗?我经常听到“MongoError:Cannotcreatefield'-1'inElement”,事实上,一旦他们推出了2.6稳定版,这将是一件好事。请帮助。也只适用于更新,对吗?向数组中添加新项无效。在向数组中预先添加单个值时,是否必须使用$each
?@若要使用$position修饰符,它必须与$each修饰符一起显示。来源: