在mongodb中,我有两个可以使用的集合,可以帮助我回答问题"Where are the cell towers in my state?"
第一个集合是从人口普查数据创建的,它具有状态边界的多边形。
第二个集合是通过下载OpenCellId数据库并导入它而创建的。 “l”是塔的位置坐标键。
javascript代码需要获取状态,然后在该状态下打印塔。
我使用内华达州Polygon的文本(复制/粘贴)代替find()
调用中的stateBounds变量完成了此操作。
但是,当传递完全相同的对象而非复制/粘贴时,console.log("Tower found: %j", item);
调用会打印"Tower found: [Circular]"
。
const mongoUrl = 'mongodb://localhost:27017/test';
const hostname = '127.0.0.1';
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect(mongoUrl, function(err, db){
var towers = db.collection('celltowers');
var states = db.collection('states');
states.findOne({"properties.STUSPS": "NV"},function(err, item){
getTowers(towers, item);
});
});
function getTowers(celltowers, state) {
var stateBounds = JSON.stringify(state, "geometry.coordinates");
celltowers.find({l:{$geoWithin:{$geometry:{type: "Polygon", coordinates: stateBounds}}}}, function(err, item) {
console.log("Tower found: %j", item);
});
}
我需要为celltowers.find()
使用geojson Polygon。
我该怎么做才能解决这个问题?
答案 0 :(得分:0)
假设您的数据库如下:
{
//Some more fields as well
geometry:{coordinates : [0,12]};
}
您在查询中尝试的是不对的。您尝试将整个记录即state
作为coordinates
。相反,您应该从查询查询中的记录中给出坐标值。
这可以解决您的问题: -
function getTowers(celltowers, state) {
var stateBounds = JSON.stringify(state);
celltowers.find({l:{$geoWithin:{$geometry:
{
type: "Polygon",
coordinates: stateBounds.geometry.coordinates //Change is here.
}
}}}, function(err, item)
{
console.log("Tower found: %j", item);
});
}
您可以参考doc了解有关如何使用的更多信息。