【问题标题】:Filtering subdocuments in MongoDB在 MongoDB 中过滤子文档
【发布时间】:2022-01-01 15:31:13
【问题描述】:

我有一个这样的文件:

{"_id" : ObjectId("5836b91788538303"),
 "Name" : "Maria",
 "Email" : "mgarciasanz@gmail.es",
 "Age" : 34,
 "Contacts": [
      {"Contact_user" : {
               "_id" : ObjectId("5836b916885383"),
               "Name" : "Alejandro",
               "Email" : "aamericagarzon@hotmail.es",
               "Age" : 32}},

      {"Contact_user" : {
               "_id" : ObjectId("5836b916888956"),
               "Name" : "Victor",
               "Email" : "ctiernocrespo@hotmail.es",
               "Age" : 41}},

       {"Contact_user" : {
               "_id" : ObjectId("5836b9168880987"),
               "Name" : "Agata",
               "Email" : "adelgadosanchez@hotmail.es",
               "Age" : 37}},
         ...

      ]}

我需要的第一件事是将"Email" 与“mgarciasanz@gmail.es”匹配,第二步是过滤子文档以获取年龄大于或等于 36 岁的联系人。我已经尝试过展开、双重匹配条件、过滤器......但我没有进入解决方案。

此外,我需要这样的输出:

{"Email" : "mgarciasanz@gmail.es", "Contact_email" : "vtiernocrespo@hotmail.es", "Contact_age" : 41}
{"Email" : "mgarciasanz@gmail.es", "Contact_email" : "adelgadosanchez@hotmail.es", "Contact_age" : 37}
{"Email" : "mgarciasanz@gmail.es", "Contact_email" : "tjazmintablas@hotmail.es", "Contact_age" : 36}

如何才能在每个输出句子中重复"Email"

提前谢谢你

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    你可以试试查询,

    • $match您需要的条件
    • $unwind 解构 Contacts 数组
    • $match您需要的条件
    • $project 显示必填字段
    db.collection.aggregate([
      {
        $match: {
          Email: "mgarciasanz@gmail.es"
        }
      },
      { $unwind: "$Contacts" },
      {
        $match: {
          "Contacts.Contact_user.Age": {
            $gte: 36
          }
        }
      },
      {
        $project: {
          _id: 0,
          Email: 1,
          Contact_email: "$Contacts.Contact_user.Email",
          Contact_age: "$Contacts.Contact_user.Age"
        }
      }
    ])
    

    Playground

    【讨论】:

      猜你喜欢
      • 2015-07-23
      • 2020-04-14
      • 2018-01-26
      • 1970-01-01
      • 2013-06-08
      • 2016-09-01
      • 2014-10-14
      • 2020-12-29
      相关资源
      最近更新 更多