如何为嵌入文件编写mongo查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为嵌入文件编写mongo查询相关的知识,希望对你有一定的参考价值。

我有一个要求,我需要从不同的嵌入式文档中选择不同的字段

{
  "isbn":"1234567890",
  "title":"Mongo db",
  "formats":[
      {"isMaster":"true",
      "digiform":"EBK",
      "isbn":"6563636222"},
      {"isMaster":"false",
      "digiform":"EBGE",
      "isbn":"333554445447"
      },
      {"isMaster":"false",
      "digiform":"HARD",
      "isbn":"776655440011"
      }
   ]
}

{
  "isbn":"11111",
  "title":"SQL",
  "formats":[
      {"isMaster":"false",
      "digiform":"EBK",
      "isbn":"22222"},
      {"isMaster":"false",
      "digiform":"EBGE",
      "isbn":"33333"
      },
      {"isMaster":"false",
      "digiform":"HARD",
      "isbn":"444444"
      }
   ]
}
 {
      "isbn":"AABB11",
      "title":"Linux",
      "formats":[
          {"isMaster":"true",
          "digiform":"EBGE",
          "isbn":"5555555"}
       ]
    }

我想获得isMaster为true的对象的Title和ISBN,并且至少有一种格式,它具有digiform的值作为EBGE

所以结果会是

Title      ISBN   
Mongo db   6563636222 
Linux      5555555

注意:我无法修改对象

答案
db.state.aggregate(

// Pipeline
[
    // Stage 1
    {
        $unwind: {
            path : "$formats",
            preserveNullAndEmptyArrays : false 
        }
    },

    // Stage 2
    {
        $match: {
            "formats.isMaster":"true",
            "formats.digiform":"EBGE"
        }
    },

    // Stage 3
    {
        $group: {
            "_id":"$_id",
            "title":{$last:"$title"},
            "isbn":{$last:"$formats.isbn"}
        }
    },
]);

以上是关于如何为嵌入文件编写mongo查询的主要内容,如果未能解决你的问题,请参考以下文章

Solr Highlighting:如何为同一字段请求多个片段长度?

如何为使用两个数据库(mysql和mongo)的django项目编写单元测试

如何为 REST API 构建 Mongo 数据库 [关闭]

如何为 XSLT 代码片段配置 CruiseControl 的 C# 版本?

如何为 apollo 客户端生成片段类型?

如何为 GraphQLObjectType 的 GraphQLList 定义 Relay 片段?