【问题标题】:MongoDB unwind empty array and not ignoring input documentMongoDB展开空数组而不忽略输入文档
【发布时间】:2014-11-20 16:51:04
【问题描述】:

在这种情况下,How do I keep documents in aggregation with $unwind 聚合可以省略,但如果您有更复杂的情况需要聚合框架怎么办?你怎么能保留这些文件,而仍然解散那些有非空列表的文件?

我的案例涉及具有多个阶段(匹配、展开、项目、匹配、组......)的聚合管道,我根本无法回退到普通的“匹配”,因为这些嵌套数组需要以报告的形式呈现(JasperReports )。我首先认为$unwind empty array 可以解决我的问题,但它不会因为这个数组需要为空,因为我稍后在 JasperReport 中对这些值进行分组并按原样显示它们。

我希望我已经足够清楚了。 有什么想法吗?

【问题讨论】:

  • 在展开长度为 k 的数组时,聚合管道会生成 k 个文档,包括如果 k = 0。要保留文档,您可以将一个虚拟值填充到数组(或投影数组)中。询问您的具体案例可能会更有成效,因为您的问题的完整背景可能会提供其他选择。
  • 这样的问题似乎太宽泛了。请通过发布示例文档和预期输出以及您尝试过的内容来缩小范围。

标签: mongodb aggregation-framework


【解决方案1】:

从 MongoDb 3.2 开始,$unwind 运算符支持preserveNullAndEmptyArrays:<boolean>

所以当preserveNullAndEmptyArrays:true 时,它也会包含没有任何数据或空数据的值。

欲了解更多信息,请访问 - https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/#document-operand-with-options

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 2017-03-03
    • 2015-10-21
    • 2014-04-02
    • 2020-11-07
    相关资源
    最近更新 更多