匹配mongo文档数组中的元组键

时间:2019-07-30 15:11:05

标签: mongodb aggregation-framework

背景

我有一些物品。这是一个:

{ "_id" : ObjectId("5d3e315975132b3a43149225"),
"thetime" : 201812,
"name": "watermelon",
"cost" : 7,
"info" : "empty"
"taglist" : [ 
  { "color" : "red" }, 
  { "color": "green"},
  { "store" : "market" },
  { "taste" : "sweet" } ]
}

我正在尝试对每个在其$match中具有键color的项上taglist进行汇总(至少一次)。稍后,我想对每种颜色或每家商店等的总成本进行分组。因此,我仅此项目集合的输出为(red: $7, green: $7)。重点是:我不想使用$find;我想使用$match

问题:

如何匹配数组中的元组键?

我到目前为止所拥有的

此查询用于获取具有键值对的项目:(颜色,红色):db.items.aggregate([{$match: {"taglist":{"color":"red"}}}]);

但是,我不知道如何更改查询以返回所有具有任何颜色的项目。

注意:我宁愿不要以$unwind开头,因为文档实际上可能比该文档大,并且性能很重要。

2 个答案:

答案 0 :(得分:3)

如果要返回所有具有键色的数据。 您可以使用$exist

db.items.aggregate([{$match: {"taglist.color":{$exists:true}}}])

答案 1 :(得分:1)

比赛之前,您需要展开标签列表

    db.items.aggregate([
       {
          $unwind: "$taglist"
       },
       { 
          $match: { $exists:{"$taglist.color":true}}}
       }
    }
  ]);

根据密钥,您可以进一步分组