您如何使用聚合框架仅选择具有子字段的MongoDB文档?

时间:2019-06-27 18:23:57

标签: mongodb aggregation-framework exists

使用汇总时,如何从mongo集合中筛选出没有子字段的文档?

该集合如下所示:

{ 
  "_id": ObjectId("adasdasd"),
  "obj": { "a": 1 }
},

{ 
  "_id": ObjectId("ergergerg"),
  "obj": { "b": 2 }
},

{ 
  "_id": ObjectId("adasdasd"),
  "obj": { "a": 3, "b": 4 }
},

我将如何使用aggregate()函数仅选择“ obj”字段包含“ b”子字段的文档?结果应如下所示:

{ 
  "_id": ObjectId("ergergerg"),
  "obj": { "b": 2 }
},

{ 
  "_id": ObjectId("adasdasd"),
  "obj": { "a": 3, "b": 4 }
},

我意识到我可以使用find()和$ exists,但是我正在寻找使用Aggregate()的解决方案。任何帮助是极大的赞赏。

1 个答案:

答案 0 :(得分:1)

我的头顶上

$match: {'obj.b': { $exists: true, $ne: null } }

看看$match stage

  

过滤文档以仅传递与   指定条件进入下一个管道阶段。

     

$ match阶段具有以下原型形式:

     

{$ match:{}}

还有$exists operator

  

$ exists语法:{字段:{$ exists:}}

     

为true时,$ exists匹配包含以下内容的文档:   字段,包括字段值为空的文档。如果   为假,查询仅返回不包含以下内容的文档:   字段。

相关问题:How do you query for "is not null" in Mongo?