考虑在mongoDB中进行以下收集:
{a:[4,2,8,71,21]}
{a:[24,2,2,1]}
{a:[4,1]}
{a:[4,2,8,21]}
{a:[2,8,71,21]}
{a:[4,2,8]}
如何以最轻松的方式获得以下结果:
获取数组的第n个元素
{a:4}
{a:24}
{a:4}
{a:4}
{a:2}
{a:4}
获取元素2到4
{a:[8,71,21]}
{a:[2,1]}
{a:[]}
{a:[8,21]}
{a:[71,21]}
{a:[8]}
以及其他类似的查询。
答案 0 :(得分:6)
您要找的是$slice
projection。
你可以传递一个带有多个值的简单$limit
来返回(例如1):
> db.mycoll.find({}, {_id: 0, a: { $slice: 1}})
{ "a" : [ 4 ] }
{ "a" : [ 24 ] }
{ "a" : [ 4 ] }
{ "a" : [ 4 ] }
{ "a" : [ 2 ] }
{ "a" : [ 4 ] }
您可以传递参数为($skip
,$limit
)的数组。
注意:要匹配您的预期输出,您必须找到元素3到5(跳过前2个元素,返回下3个元素):
> db.mycoll.find({}, {_id: 0, a: { $slice: [2,3]}})
{ "a" : [ 8, 71, 21 ] }
{ "a" : [ 2, 1 ] }
{ "a" : [ ] }
{ "a" : [ 8, 21 ] }
{ "a" : [ 71, 21 ] }
{ "a" : [ 8 ] }
将元素数量传递给$ skip,将值设置为1。
例如,要查找第二个元素,您需要跳过1个条目:
> db.mycoll.find({}, {_id: 0, a: { $slice: [1,1]}})
{ "a" : [ 2 ] }
{ "a" : [ 2 ] }
{ "a" : [ 1 ] }
{ "a" : [ 2 ] }
{ "a" : [ 8 ] }
{ "a" : [ 2 ] }
$slice
运算符: