如何使用 MongoDB 过滤子文档中的数组?

mongodbdatabasebig data analytics

在应用匹配之前,您可以使用聚合并展开数组列表。为了理解上述概念,让我们创建一个包含文档的集合。创建包含文档的集合的查询如下:

> db.filterArray.insertOne( { "L": [{ "N":1 }, { "N":2 }, { "N":3 }, { "N":4 }, { "N":5 } ]});

运行上述查询后可见以下内容:

{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6d63f2734e98fc0a434aeb")
}

使用 find() 方法显示集合中的文档。查询语句如下:

> db.filterArray.find().pretty();

输出结果如下:

{
   "_id" : ObjectId("5c6d63f2734e98fc0a434aeb"),
   "L" : [
      {
         "N" : 1
      },
      {
         "N" : 2
      },
      {
         "N" : 3
      },
      {
         "N" : 4
      },
      {
         "N" : 5
      }
   ]
}

以下是使用 MongoDB 过滤子文档中数组的查询。我们使用 $gt 来获取大于 3 的字段:

> db.filterArray.aggregate({ $match:{_id:ObjectId("5c6d63f2734e98fc0a434aeb")}}, {
$unwind:'$L'}, {$match:{'L.N':{$gt:3}}},
{$group:{_id:'$_id',subDocument:{$push:'$L.N'}}}).pretty();

输出结果如下:

{
   "_id" : ObjectId("5c6d63f2734e98fc0a434aeb"),
   "subDocument" : [
      4,
      5
   ]
}

相关文章