mongooseで位置 糞サンプル
緯度経度はコンソールでdb.name.ensureIndex({ "loc" : "2d" });みたいなことをせよ。
model/photo.js
var Mongoose = require('mongoose'); var mongoose = new Mongoose.Mongoose(); var db = mongoose.connect('mongodb://localhost:27017/db_name'); var Photo = new Schema({ data : { type : String, required : true }, loc : { lat : { type : Number, required : true }, lng : { type : Number, required : true } } }); mongoose.model('Photo', Photo, 'Photo', false); module.exports = db.model('Photo');
半径3kmの写真を3件検索
var EventEmitter = require('events').EventEmitter; var Photo = require('path/to/photo'); var find = function(query){ var ev = new EventEmitter(); Photo.find(query, {}, { sort : { '_id' : -1 }, limit : 3 }, function(error, photos){ if(!error && photos){ ev.emit('end', photos); }else{ console.log(error); ev.emit('error'); } }); return ev; }; var searching_photos = find({ loc : { $nearSphere : [35.698619, 139.773288], // longitude, latitude $maxDistance: 0.00092 // たしかこれで3km } }); searching_photos.on('end', function(photos){ return photos; }); searching_photos.on('end', function(){ return; });
こんな感じ。動作確認してない。