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

Mongodb tìm so sánh các phần tử mảng

Bởi vì bạn luôn có định dạng chính xác của trường (hình tròn là một mảng hai phần tử), bạn có thể chuyển đổi nó trong khung tổng hợp thành hai trường và sau đó so sánh chúng trong một phép chiếu và so khớp để chỉ lấy lại các phần tử đáp ứng yêu cầu của bạn phần tử mảng thứ hai lớn hơn phần tử mảng đầu tiên.

db.place.aggregate( [
      { $unwind : "$center" },
      { $group : { _id : "$_id", 
                   centerX : {$first:"$center"}, 
                   centerY : {$last:"$center"} 
      } },
      { $project : { YgtX : { $gt : [ "$centerY", "$centerX" ] } } },
      { $match : { YgtX : true } }
] );

Bây giờ, nếu mảng của bạn là một cặp giá trị số tùy ý, thì bạn có thể sử dụng ở trên.

Trong nhận xét, bạn đã nói rằng cặp của bạn đại diện cho tọa độ (vĩ độ, kinh độ) - hãy nhớ rằng trong MongoDB, các cặp tọa độ luôn là được lưu trữ lâu, vĩ độ - nếu các giá trị x, y thực tế của bạn là tọa độ trên một địa điểm bằng phẳng (trái ngược với hình cầu), bạn có thể tìm thấy tất cả các tài liệu có tọa độ Y lớn hơn tọa độ X bằng một truy vấn không gian địa lý:

db.place.find( { center : { $geoWithin : { $geometry : {
                  type:"Polygon", 
                  coordinates:[[[50,50],[-50,50],[-50,-50],[50,50]]]
} } } } );

Truy vấn trên giả định rằng hệ tọa độ của bạn đi từ -50 đến 50 dọc theo X và Y và nó tìm thấy tất cả các điểm trong tam giác đại diện cho tất cả các tọa độ có Y> =X.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để xây dựng truy vấn để cập nhật tài liệu mảng lồng nhau trong mongo?

  2. REACT tìm nạp yêu cầu bài đăng

  3. Đăng ký xuất bản Meteor không phản ứng

  4. mongodb:Tăng kết nối tối đa trong mongodb

  5. MongoDB trên AWS:Làm thế nào để Chọn Loại Phiên bản EC2 Phù hợp cho Máy chủ MongoDB của bạn?