Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 aggregate获取男性的值之和_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

如何使用Mongodb aggregate获取男性的值之和

如何使用Mongodb aggregate获取男性的值之和,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我是mongoDB的新手,在获取值的总和时遇到困难。我想按日期得到男性分组的总数。 我怎样才能做到这一点?我尝试了下面的查询,但没有成功。我很难找回男性的价值 db.sales.aggregate( [ { $group : { _id: "$date", TotalMaleValue: { $sum: "$follower_demographics.gender.value" } } } ] ) 我的文档如下所示: { "_

我是mongoDB的新手,在获取值的总和时遇到困难。我想按日期得到男性分组的总数。 我怎样才能做到这一点?我尝试了下面的查询,但没有成功。我很难找回男性的价值

db.sales.aggregate(
[
  {
    $group : {
       _id: "$date",
       TotalMaleValue: { $sum: "$follower_demographics.gender.value" }
    }
  }
]
)
我的文档如下所示:

{
        "_id" : ObjectId("566dd67aef3ccf85743c4b10"),
        "date" : "somedate",
        "follower_demographics" : {
                "gender" : [
                        {
                                "key" : "Male",
                                "value" : 480
                        },
                        {
                                "key" : "Female",
                                "value" : 1705
                        }
                ]
        }
}
感谢您的帮助。

请注意,性别是一个数组。因此,您需要稍微修改查询以按数组中的对象分组

,follower_demographics.gender字段。现在,这将为gender数组中的一个对象提供一个文档

,只有那些你感兴趣的文件,即那些具有男性性别价值的文件

现在,按性别键并获取值字段的值

示例代码:

db.sales.aggregate([
{$match:{"follower_demographics.gender.key":"Male"}},
{$unwind:"$follower_demographics.gender"},
{$match:{"follower_demographics.gender.key":"Male"}},
{$group:{"_id":"$date",
         "sum_of_males":{$sum:"$follower_demographics.gender.value"}}}
])
如果您使用的是MongoDB-3.2或更高版本,那么最好的方法是对您的文档执行此操作,并使用运算符返回一个仅包含键为男性的子文档的数组。管道中的下一个阶段将是对数组进行非规范化的阶段。最后一个阶段是使用累加器运算符计算值之和的阶段

当然,管道开头的阶段只允许您选择那个些符合条件的文档。这可以减少要在管道的下一阶段处理的文档的大小

db.sales.aggregate[ {$match':{ ‘follower_demographics.gender’:{$elemMatch':{'key':'Male'} }}, { “$project”:{ “日期”:1, “性别”:{ “$filter”:{ “输入”:“$follower_demographics.gender”, ‘as’:‘g’, 'cond':{'$eq':['$$g.key','Male']} } } } }, {'$REWIND':'$SEXT'}, {'$group':{ “_id”:“$date”, 'TotalMaleValue':{'$sum':'$gender.value'} }} ] 在MongoDB 3.2之前,您需要在$match之后使用鲜为人知的运算符返回一个数组,其中只包含键为男性的子文档

db.sales.aggregate[ {$match':{ “follower_demographics.gender':{$elemMatch':{'key':'Male'} }}, {$redact':{ “$cond”:[ {'$or':[{'$eq':['$key',Male']},{'$not':'$key'}]}, “$$下降”, “$$PRUNE” ] }}, {'$unwind':'$follower_demographics.gender'}, {'$group':{ “_id”:“$date”, 'TotalMaleValue':{'$sum':'$follower_demographics.gender.value'} }} ]