格式化MongoDB查询输出

时间:2016-05-21 13:27:43

标签: php mongodb mongodb-query aggregation-framework mongodb-php

我目前正在运行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 个答案:

答案 0 :(得分: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 
    }}
]);

产生类似的东西:

{ "coordinates" : [ 52.3746373, 4.85773855 ] }

PHP中的翻译给出:

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