我如何在node.js中构造一个特定的查询来从mongodb中获取数据?

我正在使用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}); } 

所以这工作得很好,但现在我想添加另一个参数到这个查询 – date。 所以我想find所有的用户在一个特定的位置,并创造了他们在过去16个小时的沉重…我应该如何修改我的查询来获得所有这些结果? 非常感谢任何线索!

要添加date查询,请创build一个表示16小时前的date时间的date对象:

 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);