Mongo Distinct Count和Where

时间:2016-02-01 13:35:23

标签: javascript node.js mongodb mongoose

我需要帮助在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感觉更加复杂。这里的一些专家可以帮助我吗。

2 个答案:

答案 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的所有用户的计数,并键入“资产搜索”。你的时间戳字段真的是一组时间戳吗?

//现在就像你希望的那样编辑