1

現在、MongoDBインスタンスを実行して、収集されたつぶやきをリアルタイムでジオボックス内に保存しています。それで、ヒートマップを生成して、アムステルダムで最も多くのつぶやきがどこに送られたかを示したいと思います。これを行うには、地理的な行だけを照会する必要があります。これは次のコード行で動作します:フォーマットMongoDBクエリ出力

db.testtweets.find({"geo": { "$ne": null } }, { "geo": 1 }); 

残念ながら、これはGoogle Maps APIに必要な情報を返します。出力:

{ "_id" : ObjectId("56fea2cf206e3712f3d1a9bb"), "geo" : { "type" : "Point", "coordinates" : [ 52.3746373, 4.85773855 ] } } 

私は出力として欲しい:

52.3746373, 4.85773855 

私はMongoDBのに非常に新しいですので、実際に任意の提案をいただければ幸いです。

答えて

1

あなたがfind()を使用して得ることができる最も近いです:

生成
db.testtweets.find(
    { "geo": { "$ne": null } }, 
    { "geo.coordinates": 1, "_id": 0 } 
) 

{ "geo" : { "coordinates" : [ 52.3746373, 4.85773855 ] } } 

をそこからあなたは「座標」配列フィールドの値を返すために、クライアント側の処理を使用します。


aggregate()メソッドを使用してこれを行うこともできます。必要なのは$projectの文書だけです。以下のような何か得

db.testtweets.aggregate([ 
    { "$match": { "geo": { "$ne": null } } }, 
    { "$project": { 
     "coordinates": "$geo.coordinates", 
     "_id": 0 
    }} 
]); 

:PHPで

{ "coordinates" : [ 52.3746373, 4.85773855 ] } 

翻訳ができます:

db.testtweets.aggregate(array( 
    array("$match" => array("geo" => array("$ne" => null)), 
    array("$project" => array( 
     "coordinates" => "$geo.coordinates", 
     "_id" => 0 
    )) 
)); 
+0

おかげで、それは確かにあなたが言及した出力を提供します。番号52.3746373、4.85773855のみを出力する方法はありますか? – Joost

関連する問題