node.js - 如何在node.js中构建特定查询以从mongodb获取数据?

标签 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: 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/

相关文章:

mongodb - 如何按超出范围的日期查询文档?

node.js - $ mongoDB findOneAndUpdate() 中的投影

javascript - 使用 Mongoose 在所有现有集合中查找引用文档

node.js - 应如何正确处理 Azure Function 中 Azure 服务总线/主题客户端的打开和关闭?

node.js - Node-horseman 未处理的拒绝评估

javascript - 如何从 Node.js 发送电子邮件?

node.js - Node JS 未从 Windows 命令提示符运行

node.js - node.js 原生 mongodb 驱动程序在运行 db.command({aggregate : . ..}) 时返回 "not master"错误

node.js - Mongoose - 如何为所有模型创建通用方法?

node.js - NodeJS 带有 byId() 的额外字段;