У меня есть следующий объект:MongoDB: операция Матч с DAYOFWEEK фильтром
{
...
"junctionId" : "6301",
"ts" : ISODate("2016-08-10T11:17:47.000Z")
...
}
Я хочу, чтобы фильтровать документы, которые не имеют метки времени определенный день недели.
Я могу это следующим образом:
db.getCollection('phasedata-test').aggregate([
{ $match : {
ts : { $gte : ISODate('2016-08-18T21:00:00.000Z'), $lte: ISODate('2016-08-25T21:30:00.000Z') },
junctionId : { $eq : "6301"}}
},
{
$sort: {ts : 1}
},
{ "$group": {
"_id": {
"year": { "$year": "$ts" },
"month": { "$month": "$ts" },
"day": { "$dayOfMonth": "$ts" },
"hour": { "$hour": "$ts" },
"interval": {
"$subtract": [
{ "$minute": "$ts" },
{ "$mod": [{ "$minute": "$ts"}, 15 ] }
]
}
},
"dayOfWeek": { "$first": { "$dayOfWeek": "$ts" }},
}
},
{ $match :{
"dayOfWeek" : { $eq : 5}}
}
Пожалуйста, не смотрите на id grouping
. Это необходимо для моего запроса.
Количество документов может быть большим, поэтому я хочу уменьшить количество документов для обработки. Как я могу использовать день недели фильтр в операция первого совпадения?
Что касается
Да, это решение было бы каким-то изящным, но объектная модель уже разработана и код также написан, поэтому мне не нужно так много менять :-). – nurgasemetey