我需要帮助在Mongo中运行Distinct,Count和Where查询。 集合称为'trackedevents'
{
Type: 'Asset Search',
User: 'ABC'
Timestamp: '26/01/2015'
},
{
Type: 'Asset Search',
User: 'DEF'
Timestamp : '27/01/2015'
}
我需要帮助的是让mongo在某个时间戳范围内给出唯一身份用户 类型是'资产搜索'
我可以在SQL中相对容易地做到这一点,但是mongo感觉更加复杂。这里的一些专家可以帮助我吗。
答案 0 :(得分:2)
你可以通过几种方式解决这个问题。第一种方法是使用聚合框架,该框架使用 $match
和 $group
管道步骤来查询和分组文档。
用户字段然后得到计数:
var pipeline = [
{
"$match": {
"Type": "Asset Search",
"Timestamp": { "$gte": start, "$lte": end }
}
},
{
"$group": {
"_id": "$User",
"count": { "$sum": 1 }
}
}
];
TrackedEvent.aggregate(pipeline, function(err, result){
if (err) { /* Handle error */ }
console.log(result);
})
另一种方法是使用 distinct()
和 count()
方法的组合
var query = {
"Type": "Asset Search",
"Timestamp": { "$gte": start, "$lte": end }
};
TrackedEvent.distinct('User', query).count().exec(function (err, count) {
console.log('The number of unique users is: %d', count);
});
答案 1 :(得分:1)
User.find()
.and([{'Type': 'Asset Search'},
$and: [
{'Timestamp': {$gt: date1}},
{'Timestamp': {$lt: date2}}
]
.count()
.exec(function (err, userCount) {
//do stuff
})
如果你想要2个日期之间的范围,你可能需要在和中添加第二个和条件。目前,使用此查询,您将获得时间戳大于req.params.date的所有用户的计数,并键入“资产搜索”。你的时间戳字段真的是一组时间戳吗?
//现在就像你希望的那样编辑