我正在学习如何使用MeteorJS,我的记录如下:
meteor:PRIMARY> db.meals.find()
{ "_id" : "kHjRCXRRoC6JLYjJY", "name" : "Spaghetti & Meatballs", "calories" : "300", "eatenAt" : ISODate("2015-05-20T07:07:00Z"), "userId" : "movpJRhRMwyMZDBqf", "author" : "sergiotapia" }
{ "_id" : "vcQZ2S4MXHs49BknJ", "name" : "Lasgagna", "calories" : "150", "eatenAt" : ISODate("2015-05-20T07:07:00Z"), "userId" : "movpJRhRMwyMZDBqf", "author" : "sergiotapia" }
{ "_id" : "oqw4HZ5tybBKfMJmj", "name" : "test", "calories" : "900", "eatenAt" : ISODate("2015-05-20T07:38:00Z"), "userId" : "movpJRhRMwyMZDBqf", "author" : "sergiotapia" }
{ "_id" : "Pq6vawvTnXQniBvMZ", "name" : "booya", "calories" : "1000", "eatenAt" : ISODate("2015-05-19T07:37:00Z"), "userId" : "movpJRhRMwyMZDBqf", "author" : "sergiotapia" }
我希望使用ISODate值按日期和时间过滤这些记录。例如,请记录1月1日至1月12日上午9点至下午2点之间的记录。
是否可以使用单个字段,或者我是否需要专门针对时间使用单独的字段?
答案 0 :(得分:1)
您的查询基本上是:
查找2015-01-01和2015-01-12之间的文件,时间为09:00至14:00。
一种方法是使用 aggregation framework ,尤其是 Date Aggregation Operators 。您可以使用 meteorhacks:aggregate 包为Meteor添加适当的聚合支持。此程序包在.aggregate
个实例上公开了Mongo.Collection
方法。
使用
添加到您的应用中meteor add meteorhacks:aggregate
然后只需使用下面的.aggregate
功能。
var meals = new Mongo.Collection('meals');
var pipeline = [
{
"$project": {
"year": { "$year": "$eatenAt" },
"month": { "$month": "$eatenAt" },
"day": { "$dayOfMonth": "$eatenAt" },
"hour": { "$hour": "$eatenAt" },
"name" : 1,
"calories" : 1,
"eatenAt" : 1,
"userId" : 1,
"author" : 1
}
},
{
"$match": {
"year": 2015,
"month": 1,
"day": { "$gte": 1, "$lte": 12 },
"hour": { "$gt": 8, "$lt": 14 }
}
}
];
var result = meals.aggregate(pipeline);