如何在node.js中构造一个特定的查询来从mongodb获取数据?
我使用的是mogoosejs,有一个数据模型:如何在node.js中构造一个特定的查询来从mongodb获取数据?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我使用的是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:
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。所以我想找到一个特定位置内的所有用户,这些用户在过去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);
非常感谢你!还有一件事-我如何向
条件添加更多条件(如问题中提到的我的位置)?@randomuser1您可以将其添加到查询对象中,正如我在更新的答案中所示。
var start = moment().subtract(16, 'hours'),
criteria = { "created_at": { "$gte": start }},
query = User.find(criteria);