Mongodb 在mongo文档的数组中匹配元组键
背景 我有一系列的物品。这里有一个:Mongodb 在mongo文档的数组中匹配元组键,mongodb,aggregation-framework,Mongodb,Aggregation Framework,背景 我有一系列的物品。这里有一个: { "_id" : ObjectId("5d3e315975132b3a43149225"), "thetime" : 201812, "name": "watermelon", "cost" : 7, "info" : "empty" "taglist" : [ { "color" : "red" }, { "color": "green"}, { "store" : "market" }, { "taste" : "sweet" }
{ "_id" : ObjectId("5d3e315975132b3a43149225"),
"thetime" : 201812,
"name": "watermelon",
"cost" : 7,
"info" : "empty"
"taglist" : [
{ "color" : "red" },
{ "color": "green"},
{ "store" : "market" },
{ "taste" : "sweet" } ]
}
我正在尝试对每个在其标记列表中包含键颜色的项目进行聚合(至少一次)。稍后,我想对每种颜色或每家商店等的总成本进行分组。因此,仅此商品集合的输出将是(红色:$7,绿色:$7)
。重点是:我不想使用$find
;我想使用$match
问题:
如何匹配数组中的元组键
到目前为止我拥有的
此查询用于获取具有键值对的项:(颜色,红色):db.items.aggregate([{$match:{“taglist”:{“color”:“red”}}])代码>
但是,我不知道如何更改查询以返回任何颜色的所有项目
注意:我不希望以$unwind
开头,因为文档实际上可能比这个大,而且性能很重要 在匹配之前,您需要解开标记列表
db.items.aggregate([
{
$unwind: "$taglist"
},
{
$match: { $exists:{"$taglist.color":true}}}
}
}
]);
根据键,您可以在匹配前进一步分组,您需要解开标记列表
db.items.aggregate([
{
$unwind: "$taglist"
},
{
$match: { $exists:{"$taglist.color":true}}}
}
}
]);
如果要返回具有键颜色的所有数据,可以根据键进一步分组。
您可以使用$exist
db.items.aggregate([{$match: {"taglist.color":{$exists:true}}}])
如果要返回具有键颜色的所有数据。
您可以使用$exist
db.items.aggregate([{$match: {"taglist.color":{$exists:true}}}])
db.items.aggregate([{$match:{“taglist.color”:$exists:true}}])代码>我的理解是,您希望每个标记列表中都有键颜色的项$exist
应该适合您。我也得到了相同的答案db.items.aggregate([{$match:{“taglist.color”:$exists:true}])代码>我的理解是,您希望每个标记列表中都有键颜色的项$exist
应该适合你。我也得到了同样的答案