【问题标题】:Mongoose aggregate doesn't return unmatched subdocumentsMongoose 聚合不会返回不匹配的子文档
【发布时间】:2021-06-18 05:18:27
【问题描述】:

我在文档中有子文档。如果任何子文档提供多个条件,我会尝试获取整个文档。除了不显示不匹配的子文档外,它工作正常。

# EXAMPLE DOCUMENT
name: "Sam",
specs: [
  {city: "istanbul", color: "blue"},
  {city: "istanbul", color: "black"},
  {city: "izmir", color: "yellow"}
]
# QUERY
Dudes.aggregate([
    {$unwind: '$specs'},
    {$match: {'specs.city': "istanbul", 'specs.color': "yellow"} }
  ]);

它正在返回匹配的文档,但在文档中只有匹配的子文档。

# OUTPUT:
name: "Sam",
specs: [
  {city: "izmir", color: "yellow"}
]

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    更新的演示 - https://mongoplayground.net/p/J1GF0ErYNEk

    使用$elemMatch 匹配数组元素内的对象。

    db.collection.find({
      specs: {
        $elemMatch: {
          "city": "istanbul",
          "color": "blue"
        }
      }
    });
    

    演示 - https://mongoplayground.net/p/Wr1L6i2dipP

    可以直接使用$match,去掉 {$unwind: '$specs'}

    db.collection.aggregate([
      {
        $match: {
          "specs.city": "istanbul",
          "specs.color": "blue"
        }
      }
    ]);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 2019-04-28
    • 2016-07-11
    相关资源
    最近更新 更多