2016-06-01 12 views
0

私はAndroidアプリケーションのデータベースとしてmongodbを使用してnodejs apiを構築しています。 AndroidユーザーがGPS位置をバックエンドに送信すると、apiはすべてのデータをユーザーからの距離だけ並べ替えて返信します。

このため、私は集計フレームワークで$ geoNearステージを使用しています。私は指示に従ったが、私はデータを得ることができず、 "定義されていない"。

ここはdbのJSONデータ形式です。

{ 
    userId: "", 
    description: "", 
    location: { 
     type: "Point", 
     coordinates: [ latitude, longitude ] 
    }, 
    image: "" 
} 

ここで私のgeoNearコードです。

db.posts.createIndex({location:"2dsphere"}); 
db.posts.aggregate([ 
    { 
     $geoNear: { 
      near: { type: "Point", coordinates: [ parseFloat(geoInfo.latitude) , parseFloat(geoInfo.longitude) ] }, 
      distanceField: "distance", 
      spherical: true 
     } 
    }, 
    { $sort: { distance: 1 } }, 
    { $limit: 20 } 
], function(err, docs) { 
    if (err) { 
     callback(err, null); 
    } 
    callback(null, docs); 
}); 

未定義の結果しか表示されません。 今私はこの問題で数日間立ち往生しています。 どんな助力も大歓迎です!

答えて

2

ここに作業コードがあります。

db.open(function(err, db) { 
var collection = db.collection("posts"); 

console.log(collection.listIndexes); 

// Wait for a second before finishing up, to ensure we have written the item to disk 
setTimeout(function() { 
    collection.aggregate([ { 
     $geoNear : { 
      near : { 
       type : "Point", 
       coordinates : [ parseFloat(-73.97), parseFloat(40.77) ] 
      }, 
      distanceField : "distance", 
      spherical : true 
     } 
    }, { 
     $sort : { 
      distance : 1 
     } 
    }, { 
     $limit : 20 
    } ], function(err, docs) { 
     if (err) { 
      console.log(err); 
     } 
     console.log("completed..........."); 
     console.log("doc ====>" + JSON.stringify(docs)); 
    }); 
}, 1000); 
}); 

挿入とインデックスを作成します。コマンド: -

db.posts.insert(
{ 
    userId : "user1", 
    description : "desc 1", 
    loc : { type: "Point", coordinates: [ -73.97, 40.77 ] }, 
    name: "Central Park", 
    category : "Parks", 
    image : "image 1" 
} 
) 

db.posts.insert(
{ 
    userId : "user2", 
    description : "desc 2", 
    loc : { type: "Point", coordinates: [ -73.88, 40.78 ] }, 
    name: "La Guardia Airport", 
    category : "Airport", 
    image : "image 2" 
} 
) 

db.posts.createIndex({ loc : "2dsphere" }) 
+0

こんにちはNotionquest、親切な答えてくれてありがとう。あなたのコードはサンプルデータで動作しているようですが、データベースに持ってきても動作しません。 –

+0

ここはエラーです。 '" errmsg ":"例外:geoNearコマンドが失敗しました:{errmsg:\ "例外: '近く'フィールドはポイント\"、コード:17304、ok:0.0} "でなければなりません"、 ' –

+0

文書(1または2文書)。そうしないと、問題をデバッグすることが困難になります。 – notionquest

関連する問題