Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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的聚合和组函数中添加where条件_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

在mongodb的聚合和组函数中添加where条件

在mongodb的聚合和组函数中添加where条件,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个mongo模型,比如说包含以下数据的MYLIST:- { "_id" : ObjectId("542139f31284ad1461dbc15f"), "Category" : "CENTER", "Name" : "STAND", "Url" : "center/stand", "Img" : [ { "url" : "www.google.com/images", "main" : "1",

我有一个mongo模型,比如说包含以下数据的MYLIST:-

{ 
    "_id" : ObjectId("542139f31284ad1461dbc15f"),
    "Category" : "CENTER",
    "Name" : "STAND",
    "Url" : "center/stand", 
    "Img" : [ { 
         "url" : "www.google.com/images", 
         "main" : "1", 
         "home" : "1", 
         "id" : "34faf230-43cf-11e4-8743-311ea2261289" 
    },
      { 
         "url" : "www.google.com/images1", 
         "main" : "1", 
         "home" : "0", 
         "id" : "34faf230-43cf-11e4-8743-311e66441289" 
    } ]
}
我对MYLIST集合执行以下查询:

db.MYLIST.aggregate([
    { "$group": { 
        "_id": "$Category", 
        "Name": { "$addToSet": { 
            "name": "$Name",
            "url": "$Url",
            "img": "$Img"
        }}
    }},
    { "$sort": { "_id" : 1 } }
]);
我得到了以下结果-

[ 
     {  _id: 'CENTER',
     Name: 
     [ { "name" : "Stand", 
          "url" : "center/stand", 
    "img":                                                                                                                 { "url" : "www.google.com/images" , "main" : "1", "home" : "1", "id" : "350356a0-43cf-11e4-8743-311ea2261289" } 
      }] 
     },
     {  _id: 'CENTER',
     Name: 
     [ { "name" : "Stand", 
          "url" : "center/stand", 
    "img":                                                                                                                 { "url" : "www.google.com/images1" , "main" : "1", "home" : "0", "id" : "34faf230-43cf-11e4-8743-311ea2261289" } 
      }] 
     }
    ]
正如您所看到的,我的
img
键本身是一个对象数组,因此我在
img
数组中为每个条目的相同类别获得多个条目

我真正需要的是只获取那些对
home
key有一定价值的图像。 预期结果:-

[ 
     {  _id: 'CENTER',
     Name: 
     [ { "name" : "Stand", 
          "url" : "center/stand", 
    "img":                                                                                                                 { "url" : "www.google.com/images" , "main" : "1", "home" : "1", "id" : "350356a0-43cf-11e4-8743-311ea2261289" } 
      }] 
     },
    ] 

因此,我想在上面提到的查询中添加
img.home>0
的条件,谁能帮助我解决这个问题,因为我对MongoDB相对较新。

仍然不确定这是否是您想要的,甚至不知道为什么要在这个分组中使用。但是,如果您只想“过滤”结果中返回的数组内容,那么您想做的是在处理管道后将数组元素调整到您的条件,以便“反规范化”内容:

db.MYLIST.aggregate([
//如果您只需要那些匹配的数组成员,那么匹配
//首先包含它们的文档
{“$match”:{“Img.home”:1},
//展开以取消规范化或“取消加入”文档
{“$unwind”:“$Img”},
//再次匹配以“过滤”不匹配的元素
{“$match”:{“Img.home”:1},
//然后进行分组
{“$group”:{
“_id”:“$Category”,
“姓名”:{
“$addToSet”:{
“名称”:“$name”,
“url”:“$url”,
“img”:“$img”
}
}
}},
//最后分类
{“$sort”:{“\u id”:1}
]);
因此,
$match
管道相当于一般查询或SQL术语中的“where子句”,可以在任何阶段使用。当有某种类型的过滤结果时,通常最好将此作为第一阶段。它通过减少要处理的文档来减少总体负载,即使最终结果的“全部”没有像处理数组那样被删除


$unwind
阶段允许像处理其他文档一样处理数组元素。当然,您可以在此之后使用另一个
$match
管道阶段,以便将文档与您的查询条件进行匹配。

您想在这里实现什么?您是否真的试图按类别对唯一的项目进行分组?或者您只是试图只获取数组中与
“home”=1
匹配的项?也许展示一些你所期待的。我想要独特的类别。然后在类别本身中,我想找到它们的url和图像的唯一名称。像这样的结构:-[{u id:'BRAKE',name:[[Object],[Object],]},{u id:'CENTER',name:[[Object],[Object],]},]你并没有真正解释
“home”=1
与此有什么关系。你真的想过滤这个吗?或者你只是想解释你是通过“url”或者其他什么来wan“唯一的”项目。您可以编辑问题并添加详细信息。[Object][Object]并不是一个很好的解释。您可以更好地格式化它,并且您似乎正在显示您的“当前”结果。我在问你“期望”看到什么。我想现在你能够理解我想要什么了,因为我想要类别和名称的独特组合。谢谢,我找到了答案。