背景
我有一些物品。这是一个:
{ "_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
开头,因为文档实际上可能比该文档大,并且性能很重要。
答案 0 :(得分:3)
如果要返回所有具有键色的数据。
您可以使用$exist
db.items.aggregate([{$match: {"taglist.color":{$exists:true}}}])
答案 1 :(得分:1)
比赛之前,您需要展开标签列表
db.items.aggregate([
{
$unwind: "$taglist"
},
{
$match: { $exists:{"$taglist.color":true}}}
}
}
]);
根据密钥,您可以进一步分组