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

问题描述 投票:0回答:1

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

{
  "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

注意:我无法修改对象

mongodb nosql mongodb-query
1个回答
0
投票
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"}
        }
    },
]);
© www.soinside.com 2019 - 2024. All rights reserved.