Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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
Javascript 多值mongodb聚合_Javascript_Node.js_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Javascript 多值mongodb聚合

Javascript 多值mongodb聚合,javascript,node.js,mongodb,mongodb-query,aggregation-framework,Javascript,Node.js,Mongodb,Mongodb Query,Aggregation Framework,我正在尝试使用mongodb进行分析,但我对它非常陌生,尽管我让它为一个查询工作,但我认为它不是有效的,下面是我的数据集示例 { _id: ObjectId("54442882fa2e117a55f3458b"), analytic_num: 185, createdAt: ISODate("2014-10-19T21:09:22.167Z"), updatedAt: ISODate("2014-10-19T21:09:22.167Z"), rawBrowser: "Mozilla/5.0 (X

我正在尝试使用mongodb进行分析,但我对它非常陌生,尽管我让它为一个查询工作,但我认为它不是有效的,下面是我的数据集示例

{
_id: ObjectId("54442882fa2e117a55f3458b"),
analytic_num: 185,
createdAt: ISODate("2014-10-19T21:09:22.167Z"),
updatedAt: ISODate("2014-10-19T21:09:22.167Z"),
rawBrowser: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0",
gender: "male",
eventId: "accepted",
type: "member",
relationshipStatus: "Single",
ageRange: "18-25",
uid: "53f79ae6f158168161f04d27",
cid: "54370fa7498a776e1c065120",
education: ["high_school", "professional_degree"],
interestedIn: ["female"],
__v: 0
}
这是我正在尝试的问题

db.analytics.aggregate([{
$match: {
    createdAt: {
        $gte: new Date(2014, 9, 15),
        $lt: new Date(2014, 9, 28)
    }
}
}, {
$project: {
    _id: 0,
    minute: {
        $minute: "$createdAt"
    },
    hour: {
        $hour: "$createdAt"
    }
}
}, {
$group: {
    _id: {
        minute: "$minute",
        hour: "$hour"
    },
    hits: {
        $sum: 1
    }
}
}]);
这是我得到的结果

{ "_id" : { "minute" : 33, "hour" : 21 }, "hits" : 1 }
{ "_id" : { "minute" : 29, "hour" : 21 }, "hits" : 6 }
{ "_id" : { "minute" : 6, "hour" : 22 }, "hits" : 2 }
{ "_id" : { "minute" : 9, "hour" : 21 }, "hits" : 1 }
一切都很好,但我每小时每分钟都只收到点击,如果我只想要点击就好了

但是,如果我需要按类型、性别或年龄范围查找命中率,我需要更改
$match
查询,那么通过更改
$matvh

如何在一个查询中获得类型、性别和范围的所有命中率 我想要这样的结果

{ "_id" : { "minute" : 33, "hour" : 21 }, "hits" : 30, "member" :2 "single": 12 ,"male" :12 }
{ "_id" : { "minute" : 34, "hour" : 21 }, "hits" : 50, "member" :22 "single": 12 ,"male" :12 }
请帮忙

谢谢

您正在寻找接线员。这允许您评估一个条件,然后决定该条件是否返回要返回的值。在这种情况下,无论是要向操作添加增量还是不添加增量:

db.analytics.aggregate([
{“$match”:{
“创建数据”:{
“$gte”:新日期(2014年9月15日),
“$lt”:新日期(2014年9月28日)
}
}}, 
{“$组”:{
“_id”:{
“分钟”:{“$minute”:“$createdAt”},
“小时”:{“$hour”:“$createdAt”}
},
“hits”:{“$sum”:1},
“成员”:{
“$sum”:{
“$cond”:[
{“$eq”:[“$type”,“member”]},
1.
0
]
}
},
“单身”:{
“$sum”:{
“$cond”:[
{“$eq”:[“$relationshipStatus”,“single”]},
1.
0
]
}
},
“男性”:{
“$sum”:{
“$cond”:[
{“$eq”:[“$gender”,“male”]},
1.
0
]
}
}
}}
]);
因此,
$cond
运算符基本上是一个“三元”或
if..then..else
构造,它计算一个条件并根据该条件的确定方式返回一个值,
true | false
。以这种方式使用它来确定返回的值

小心使用日期聚合运算符。也许你想要的是每一小时的每一分钟,在这个范围内的所有天的总和。但通常人们只想要每天的离散时间段,甚至是每分钟


小心你的要求,你可能会得到它。

我不认为一次查询就可以得到结果。例如,字段性别的值可以是男性或女性;要分别求和,必须通过将每个字段指定为组id的一部分来对它们进行分组。因此,最后必须逐个对这些字段进行分组。使用mapReduce应该能够通过
一次查询
@向导获得结果。您完全不正确。我想建议你暂时停止回答这里的人,花点时间观察和学习。太多的误导性陈述来自于你对这个问题的缺乏知识。这对人们没有帮助。嘿@Neil我有语法错误:意外数字你能找出它的位置吗?$cond中缺少一个分号嘿@Neil我在评估你的答案似乎正是我想要的,如果我有一个数组,我只想问一件事,例如教育:[“高中”,“专业学位”],如何选择个人点击,如高中、专业学位,因为我不能使用$eq运算符可能我应该使用$in运算符,但我得到错误“异常:无效运算符'$in',如果我不能使用数组,你有其他建议如何解决此问题,谢谢