[英]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.