Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 在mongo文档的数组中匹配元组键_Mongodb_Aggregation Framework - Fatal编程技术网

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
应该适合你。我也得到了同样的答案