は、私は私が"Where are the cell towers in my state?"
node.js MongoDB 2dsphere find()コールで何が問題になっていますか? MongoDBので
最初のコレクションは、国勢調査のデータから作成された質問に答えるのを助けることを使用するための2つのコレクションを持っており、それは国家の境界のポリゴンを持っています。
2番目のコレクションは、OpenCellIdデータベースをダウンロードしてインポートすることで作成されました。 "l"はタワーの位置座標キーです。
JavaScriptコードは状態を取得し、その状態でタワーを印刷する必要があります。
これは、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);
});
}
のgeojsonポリゴンを使用する必要があります。
私はこれを修正するために何ができますか?
あなたのコード 'JSON.stringify(state、" geometry.coordinates ");'でこの行の意図が分かりますか? 'stateBounds'のコンソールを追加して値を確認できますか?それは適切ですか? – Shrabanee
JSON.stringifyはgeojson状態のプロパティを選択します。私はgeometry.coordinatesを選択するだけの座標とアドレス(必要なら)を必要としました。その呼び出しの結果をコピーして貼り付け、stateBoundsを置き換えることにより、find()が機能しました。ですから、コピー/ペーストがうまくいったので、それは適切だと思います。 –
Jsonを使って試した方法。弦は正しい方法ではありません。 Jsonオブジェクトから必要なフィールドだけを取得する方法については、いくつかのドキュメントを参照してください。 – Shrabanee