我正在使用 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 小时前日期时间的日期对象:
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 库,一个 super 方便的实用程序,用于执行此类操作。要在这种情况下使用它,您可以调用 subtract()
方法为:
var start = moment().subtract(16, 'hours'),
criteria = { "created_at": { "$gte": start }},
query = User.find(criteria);
关于node.js - 如何在node.js中构建特定查询以从mongodb获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34863218/