【问题标题】:How do you only select MongoDB documents that have a sub-field, using the aggregation framework?如何使用聚合框架仅选择具有子字段的 MongoDB 文档?
【发布时间】:2019-11-09 19:33:11
【问题描述】:

在使用聚合时,如何从 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,但我正在寻找使用聚合() 的解决方案。任何帮助是极大的赞赏。

【问题讨论】:

  • 那么,你尝试了什么?

标签: mongodb aggregation-framework exists


【解决方案1】:

在我的头顶:

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

看看$match stage

过滤文档以仅传递匹配的文档 指定条件到下一个管道阶段。

$match 阶段的原型形式如下:

{ $match: { } }

还有$exists operator

$exists 语法:{ field: { $exists: } }

当为真时,$exists 匹配包含 字段,包括字段值为空的文档。如果 为 false,查询仅返回不包含 字段。

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

【讨论】:

  • 是的,这就是我要找的。事实证明,我在 $match 之前使用了 $limit 并且没有得到任何结果。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-02-06
  • 2013-05-06
  • 2015-01-04
  • 2020-04-08
  • 1970-01-01
  • 2013-10-23
  • 2013-07-23
  • 2014-03-04
相关资源
最近更新 更多