2016-02-01 7 views
1

Мне нужна помощь в выполнении запроса Distinct, Count и Where в Mongo. Коллекция называется «trackedevents»Mongo Distinct Count and Where

{ 
    Type: 'Asset Search', 
    User: 'ABC' 
    Timestamp: '26/01/2015' 
}, 
{ 
    Type: 'Asset Search', 
    User: 'DEF' 
    Timestamp : '27/01/2015' 
} 

Что мне нужна помощь в получении Монго, чтобы дать мне граф из уникальных пользователей в течение определенного Timestamp диапазона, где Тип является «Поиск активов»

Я мог бы сделать это в SQL относительно легко, но монго просто чувствует себя более запутанным. Могут ли некоторые из экспертов помочь мне в этом.

+0

Нет, это просто я, ленивый il, обновляю его сейчас – TheMonkeyMan

ответ

1

Вы могли бы подойти к этому в нескольких направлениях. Первым будет использовать структуру агрегации, которая использует этапы трубопровода $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
User.find() 
     .and([{'Type': 'Asset Search'}, 
       $and: [ 
         {'Timestamp': {$gt: date1}}, 
         {'Timestamp': {$lt: date2}} 
        ] 
     .count() 
     .exec(function (err, userCount) { 
     //do stuff 
     }) 

Если вам нужен диапазон между двумя датами, вам может потребоваться добавить второе и условие в и. На данный момент с этим запросом yo будет подсчитывать количество всех пользователей с меткой времени req.params.date и тип «поиск активов». Кроме того, ваше поле timestamp действительно представляет собой массив временных меток?

// Редактировать теперь его, как вы хотели

+0

Действительно ли это применимо к монго, но как работает find(). И() не удается. – TheMonkeyMan

+0

Конечно, посмотрите здесь http://stackoverflow.com/questions/13272824/combine-two-or-queries-with-and-in-mongoose Я также добавил свой ответ – Sprotte