MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara mendapatkan semua lingkaran yang berisi Point?

Dimungkinkan menggunakan $geoIntersects MongoDB Operator kueri geospasial.

Jadi, jika Anda memiliki kumpulan poligon GeoJson dan Anda ingin mengetahui semua poligon yang berpotongan dengan titik yang Anda berikan, maka Anda perlu menjalankan perintah berikut:

db.places.find( { <locationFieldOfYourDocuments> :
                  { $geoIntersects :
                    { $geometry :
                      { type : "Point" ,
                        coordinates: [long, lat]
                } } } } )

Pada perintah di atas, loc adalah atribut setiap dokumen yang berisi koordinat poligon GeoJson. Juga, pastikan Anda memiliki 2dsphere indeks di atas <locationFieldOfYourDocuments> .

Sekarang, untuk menyelesaikan masalah awal Anda, saya akan menggunakan sedikit javascript. Mungkin ada solusi yang lebih baik tetapi tidak sepengetahuan saya.

Katakanlah semua lingkaran Anda disimpan di Circles koleksi. Saya akan menanyakan koleksi itu dan mengambil setiap lingkaran satu per satu dan kemudian melakukan perpotongan dengan koleksi lain yang akan berisi satu titik yang akan menjadi titik yang ingin Anda tanyakan apakah itu berpotongan dengan lingkaran atau tidak. Jadi biarkan titik disimpan di SinglePoint koleksi.

Scriptnya akan terlihat seperti...

db.Intersections.remove({}); // emptying the output collection
var circleCursor = db.Circles.find();
while (circleCursor.hasNext()) {
    var circle = circleCursor.next();
    var coord = circle.location;
    var radiusInRadians = circle.radius * conversionFactorForRadius;
    var intersect = db.SinglePoint.find({loc :
                                         { $geoWithin :
                                           {$centerSphere : [coord], radiusInRadians}
                                         }});
    if (intersect.hasNext()) {db.Intersections.add(circle)} // this will add all intersecting circles to Intersections collection
}

Yang harus Anda lakukan adalah menyimpan skrip ini dalam file (myScript.js) dan melakukan panggilan:

mongo DBName pathTomyScript.js

Ini akan menyimpan semua lingkaran yang berpotongan dengan titik input Anda di koleksi Intersects. Semua koleksi di atas harus ada di database DBName.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. saya mendapatkan kesalahan berikut saat menghubungkan ke server mongodb

  2. Spring Data MongoDB dengan Java 8 LocalDate MappingException

  3. Tambahkan atribut baru ke objek json yang ada di node.js

  4. Serialisasi Driver MongoDB C# dengan objek dinamis

  5. Bagaimana Melakukan Pembaruan Atom pada EmbeddedDocument di ListField di MongoEngine?