3

考虑在 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]}

和其他类似的查询。

4

1 回答 1

7

您正在寻找的是$slice投影

从数组的开头获取多个元素

您可以传递一个简单$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 ] }

获取数组的第 n 个元素

将元素的数量传递给 $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运算符:

  • 总是返回一个数组
  • 将为匹配查找条件的文档返回一个空数组,但为 $slice 选择返回一个空结果(例如,如果您要求只有 2 个元素的数组的第 5 个元素)
于 2012-11-30T20:38:08.033 回答