Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Javascript 如何在mongodb中向数组顶部添加值?_Javascript_Mongodb_Nosql - Fatal编程技术网

Javascript 如何在mongodb中向数组顶部添加值?

Javascript 如何在mongodb中向数组顶部添加值?,javascript,mongodb,nosql,Javascript,Mongodb,Nosql,如何在mongodb中向数组顶部添加值 假设我的mongo收藏中有此文档: { "colors" : [ "red", "green", "blue" ] } 如何将“黄色”添加到列表的前面 当我这样做时: {$push:{colors:"yellow"}} 我会得到这个: { "colors" : [ "red", "green", "blue", "yellow" ] } 我想要这个: { "colors" : [ "yellow", "red", "green", "blue"] }

如何在mongodb中向数组顶部添加值

假设我的mongo收藏中有此文档:

{ "colors" : [ "red", "green", "blue" ] }
如何将“黄色”添加到列表的前面

当我这样做时:

{$push:{colors:"yellow"}}
我会得到这个:

{ "colors" : [ "red", "green", "blue", "yellow" ] }
我想要这个:

{ "colors" : [ "yellow", "red", "green", "blue"] }
提前谢谢

“取消移位”在数组前面插入数据。。而“推”则将其插入末尾。 e、 g.在JavaScript中:

> a = ['red','green','blue']
[ "red", "green", "blue" ]
> a.unshift("yellow")
4
> a
[ "yellow", "red", "green", "blue" ]
但不幸的是,Mongo API不支持这种原子操作:

它只支持“推送”


您的阵列有多大?


您可以假设Mongo中的数组总是以相反的方式存储,然后使用push,或者您可以读取数组,使用unshift修改它,然后再次存储它(虽然这不是原子的)

对于任何不熟悉这一点的人,MongoDB 2.6+都支持,可以使用它来实现所需的效果。这里的好处是,您不需要返回整个文档数组,在本地更新并保存它,
$position
操作符意味着事情可以原子化完成

您需要将其与
$each
结合使用:

$push: { colors: { $each: ['yellow'], $position: 0 } }

我不相信mongodb支持unshift修饰符。我这样做了:db.testarray.update({“\u id”:ObjectId(“4df7a9e469408e699b19abd08”),{$unshift:{colors:{pink})。得到了这个错误:无效的修饰符指定了$unshift。是的,这就是它临时实现的方式。取出整个阵列,在顶部添加元素,然后将其存储回。但正如你提到的,它不再是原子的。我想另一个建议也行。我只要把它倒过来读就行了。我希望mongodb提供了一种在顶部插入内容的本地方式。谢谢你的建议!哦,而且阵列可以变得相当大。取决于用户。对于MongoDB的改进,10gen团队非常愿意接受建议。。你可以试着把它作为API的一个功能请求。是的,我想我会的。只是想确保api中没有遗漏任何功能。谢谢大家!有一个功能请求:
$push-$each-$position:0
语法很笨拙。请帮忙。谢谢你的解决方法。它确实同意我们可以使用$unshift,但现在这是关键。嘿@conman,你能改变接受的答案吗?谢谢