MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm thế nào để có được tất cả các vòng tròn mà một Điểm được chứa trong đó?

Có thể sử dụng $geoIntersects của MongoDB Toán tử truy vấn không gian địa lý.

Vì vậy, nếu bạn có một bộ sưu tập các đa giác GeoJson và bạn muốn tìm ra tất cả các đa giác giao với điểm đã cho của mình, thì bạn cần chạy như sau:

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

Trong lệnh trên, loc là thuộc tính của mỗi tài liệu có chứa tọa độ cho đa giác GeoJson. Ngoài ra, hãy đảm bảo rằng bạn có 2dsphere lập chỉ mục trên <locationFieldOfYourDocuments> .

Bây giờ, để giải quyết vấn đề ban đầu của bạn, tôi sẽ sử dụng một chút javascript. Có thể có những giải pháp tốt hơn nhưng tôi không biết.

Giả sử tất cả các vòng kết nối của bạn được lưu trữ trong Circles thu thập. Tôi sẽ truy vấn bộ sưu tập đó và tìm nạp từng vòng tròn một và sau đó thực hiện một giao điểm với một tập hợp khác sẽ chứa một điểm duy nhất sẽ là điểm bạn muốn truy vấn xem nó có giao nhau với các vòng kết nối hay không. Vì vậy, hãy để điểm được lưu trữ trong SinglePoint bộ sưu tập.

Tập lệnh sẽ giống như ...

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
}

Tất cả những gì bạn phải làm là lưu tập lệnh này vào một tệp (myScript.js) và thực hiện cuộc gọi:

mongo DBName pathTomyScript.js

Điều này sẽ lưu trữ tất cả các vòng tròn giao nhau với điểm đầu vào của bạn trong bộ sưu tập Intersects. Tất cả các bộ sưu tập trên phải nằm trong cơ sở dữ liệu DBName.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. thêm điều kiện vào kết quả giá trị gần đây nhất

  2. 5 cách để có được một giờ cho một buổi hẹn hò trong MongoDB

  3. Sao chép một bộ sưu tập trong MongoDB

  4. Làm thế nào để tổng hợp trên một mảng lớn trong mongoDB?

  5. Không thể kết nối với mongoDB cục bộ từ java