繁体   English   中英

根据条件查找mongodb(在mongoose+node.JS中)记录

[英]Find mongodb (in mongoose+node.JS) records based on a condition

我试图根据保存的纬度和经度信息的值在我的 mongoDB 数据库中查找一些记录。 我想申请以下 function 并在我的收藏中找到:

exports.findDistance = findDistance(latitude, longitude) {
    console.log('calculating with lat = ' + latitude + ' and longitude = ' + longitude);
    var radian = 0.0174532925;
    var x = Math.pow(Math.sin((latitude - this.latitude) * radian / 2), 2);
    var y = Math.cos(latitude - radian) * Math.cos(this.latitude - radian);
    var z = Math.pow(Math.sin((longitude - this.longitude) * radian/2), 2);
    var result = 2*3956*Math.asin(Math.sqrt(x + y * z));
    return result < 10;
}

当我的计算结果小于 10 时,此 function 返回 true(我使用数据库中的纬度和经度信息,由 'this' object 和两个参数引用)。 如何从 mongoDB 获取适用于此 function 的所有消息?

我尝试了以下方法:

exports.index = function(req, res) {
    var latitude = value1;
    var longitude = value2;
    Message.find(Message.findDistance, [], function(err, msgs) {
        // render the page
    });
}

However, my findDistance function doesn't seem to be called by the mongoose find function (no output seen in my developer console and I just get all results returned from my mongoDB collection). 另外,如何将纬度和经度参数传递给 findDistance function?

我的消息架构如下所示:

Message = new Schema({
    text: { type: String, required: true },
    parent: String,
    user: ObjectId,
    latitude: Number,
    longitude: Number,
    date: { type: Date, default: Date.now }
});

有人能帮我吗? :)

您的 findDistance function 需要在 MongoDB 中定义,而不是在 node.js 中定义,以便它在运行时可以访问数据库字段。 幸运的是,MongoDB 使用 JavaScript 作为其存储过程,因此 function 应该可以工作。

有关存储和使用 MongoDB 存储过程的说明,请参见此处

它等同于存储过程,但不一样。 并且建议避免使用 MongoDB 存储的 function。

欲了解更多信息: http://docs.mongodb.org/manual/applications/server-side-javascript/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM