仅返回Mongodb集合中数组字段的一部分

时间:2018-10-31 18:11:50

标签: arrays mongodb

我在Mongodb数据库中有一个非常简单的测试集合。该集合中的一项如下所示:

_id: ObjectId()
name: test
data: an array of 6 elements

例如,我想做的只是返回数组“ data”的2个元素。我该怎么做?

我在这里找到了类似的问题,但找不到答案。

1 个答案:

答案 0 :(得分:0)

样本数据:

{
  "_id" : ObjectId("5bd9f112f255307d51f3257a"),
  "name" : "foo",
  "data" : [ 1, 2, 4, 5, 6 ]
}

汇总:选中here

db.getCollection('tests').aggregate([
  {$match: {name: "foo"}},
  {$unwind: "$data"},
  {$match: {data: {$gt: 4}}},
  {$group: {
    _id: "$_id",
    name: {$first: "$name"},
    data: {$push: "$data"}
  }}
]);

输出:

{
  "_id" : ObjectId("5bd9f112f255307d51f3257a"),
  "name" : "foo",
  "data" : [ 5, 6 ]
}

步骤:

  1. $match首先过滤掉一些不需要的文档。
  2. $unwind到对象的数组。
  3. $match再次检查未转换为独立对象的数组元素上的条件。
  4. $group再次创建相同的单个文档,但我们现在将推送这些过滤后的数组元素,并将其再次作为数组。