Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 你能用mongo$push prepend代替append吗?_Arrays_Mongodb - Fatal编程技术网

Arrays 你能用mongo$push prepend代替append吗?

Arrays 你能用mongo$push prepend代替append吗?,arrays,mongodb,Arrays,Mongodb,当我执行mongo$push时,我希望在集合的开头添加push add,而不是追加到末尾 是否可以执行原子推送更新,将元素作为第一个元素而不是最后一个元素添加 2014年更新:。几天前,有人问了一个类似的问题。不幸的是,简短的回答是“否”,但此功能有一个开放的请求。 -“$push()到数组前面” 在另一个线程上还有更多信息和可能的解决方法:“使用MongoDB数组作为堆栈”—— 希望以上内容会有用,并帮助您找到一个可接受的解决方案 在mongo v2.2中测试,使用带$set的负索引作为前置

当我执行mongo$push时,我希望在集合的开头添加push add,而不是追加到末尾

是否可以执行原子推送更新,将元素作为第一个元素而不是最后一个元素添加



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修饰符一起显示。来源: