我正在使用mogoosejs并有一个数据模型:
var UserSchema = new Schema({
username: {type: String, required: true},
location: {type: [Number], required: true}, // [Long, Lat]
created_at: {type: Date, default: Date.now},
updated_at: {type: Date, default: Date.now}
});
现在,在该架构上,我想执行一个查询,该查询将找到特定区域内的所有用户,因此我做了如下操作:
var query = User.find({});
if(distance){
query = query.where('location').near({ center: {type: 'Point', coordinates: [long, lat]},
maxDistance: distance * 1609.34, spherical: true});
}
这样效果很好,但是现在我想向该查询添加另一个参数-日期。因此,我想找到一个特定位置的所有用户,这些用户在过去16个小时内创建了自己的帐户。如何修改查询以获取所有这些结果?非常感谢您提供任何线索!
要添加日期查询,请创建一个代表16小时前的datetime的日期对象:
var start = new Date();
start.setHours(start.getHours()-16);
现在在查询中将以上内容用作:
// get coordinates [ <longitude> , <latitude> ]
var coords = [];
coords[0] = req.query.longitude;
coords[1] = req.query.latitude;
var criteria = {
"created_at": { "$gte": start }
"location": {
"$near": coords,
"$maxDistance": distance * 1609.34
}
},
query = User.find(criteria);
如果有机会,请使用moment.js库,这是一个超级方便的实用程序,用于执行此类操作。要在这种情况下使用它,您可以将subtract()
方法调用为:
var start = moment().subtract(16, 'hours'),
criteria = { "created_at": { "$gte": start }},
query = User.find(criteria);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句