1

В настоящее время я запускаю экземпляр MongoDB для сохранения собранных твитов в геополе в реальном времени. При этом я хочу создать тепловую карту, чтобы показать, куда отправили большинство твитов в Амстердаме. Для этого я должен запросить только строку geo. Это работает со следующей строкой кода:Формат MongoDB Выход запроса

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

К сожалению, это возвращает больше информации, чем требуется API Карт Google. Выход:

{ "_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 
    }} 
]); 

, который дает что-то вроде:

{ "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 
    )) 
)); 
+0

Спасибо, это действительно дает выход вы упомянули. Есть ли способ, который будет выводить только номера 52.3746373, 4.85773855? – Joost

Смежные вопросы