Mongoose 在聚合时忽略空字段

Posted

技术标签:

【中文标题】Mongoose 在聚合时忽略空字段【英文标题】:Mongoose ignoring empty fields while aggregating 【发布时间】:2021-11-20 11:37:11 【问题描述】:

收藏:A

文档:


color: '',
age: 22,
name: 'John'

收藏:B

文档:


name:'John',
marks: 100

我通过像这样加入两个集合来执行聚合

A.aggregate([
    
      $match: filters
    ,
    
      $lookup: 
        from: 'B',
        localField: 'name',
        foreignField: 'name',
        as: 'alias1',
      
    ,
    
      $unwind: '$alias1'
    ,
    
      $project: 
        color: '$color',
        marks: '$alias1.marks',
       
])

我得到的结果是:


marks:100

我期待的结果是:


color: '',
marks: 100

我假设由于颜色字段为空,聚合默认忽略它。

基本上,我想连接两个表并获取几个字段的数据。如果聚合不能解决这个问题,那么任何其他实现预期结果的方法都会有很大帮助。谢谢。

【问题讨论】:

聚合是否适用于非空color 字段? @WernfriedDomscheit,但 alias1 不是对集合 B 字段的引用吗? 您的样本按预期工作,请参阅mongoplayground.net/p/bd-F3iMADfP 您的查询会产生您需要的结果see,但这假设从集合 B 中查找最大值为 1,否则您将需要 $group,请逐个尝试各个阶段以查看发生了什么。 【参考方案1】:

尝试以下查询:

A.aggregate([
    
      $match: filters
    ,
    
      $lookup: 
        from: 'B',
        localField: 'name',
        foreignField: 'name',
        as: 'alias1',
      
    ,
    
      $unwind: '$alias1'
    ,
    
      $project: 
        color:  $ifNull: [ "$color", "" ] ,
        marks: '$alias1.marks',
       
])

【讨论】:

以上是关于Mongoose 在聚合时忽略空字段的主要内容,如果未能解决你的问题,请参考以下文章

mongoose基本增删改查

Typescript Mongoose 以类型安全的方式忽略查询结果中的某些字段

Mongoose 模式创建空数组字段

Mongoose 在使用 $facet 进行聚合时如何使用 populate()?

Mongoose .find() 通过枚举字段搜索时返回一个空数组

如何在聚类分析中处理空值?