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

Pymongo tổng hợp:lọc theo số trường (động)

Có, bây giờ bạn có thể sử dụng toán tử tổng hợp $objectToArray ( SERVER-23310 ) để biến khóa thành giá trị. Nó sẽ có thể đếm số trường 'động'. Kết hợp toán tử này với $ addFields có thể khá hữu ích.

Cả hai toán tử đều có sẵn trong MongoDB v3.4.4 + Sử dụng tài liệu của bạn ở trên làm ví dụ:

db.sports.aggregate([
          { $addFields : 
             { "numFields" : 
               { $size:
                 { $objectToArray:"$$ROOT"}
               }
             }
          }, 
          { $match: 
            { numFields: 
              {$gt:2}
            }
          }
])

Đường dẫn tổng hợp ở trên, trước tiên sẽ thêm một trường có tên là numFields . Giá trị sẽ là kích thước của một mảng. Mảng sẽ chứa số trường trong tài liệu. Giai đoạn thứ hai sẽ chỉ lọc cho 2 trường trở lên (hai trường vì vẫn còn _id trường cộng với name ).

Trong PyMongo , đường dẫn tổng hợp ở trên sẽ giống như sau:

cursor = collection.aggregate([
                         {"$addFields":{"numFields":
                                         {"$size":{"$objectToArray":"$$ROOT"}}}}, 
                         {"$match":{"numFields":{"$gt":2}}}
         ])

Đã nói ở trên, nếu có thể cho trường hợp sử dụng của bạn, tôi khuyên bạn nên xem xét lại mô hình dữ liệu của bạn để truy cập dễ dàng hơn. tức là Thêm một trường mới để theo dõi số lượng môn thể thao khi một vị trí thể thao mới được chèn / thêm.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để sử dụng một biến làm tên trường trong mongodb-native findOne ()?

  2. MongoDB:Cách đổi tên trường bằng regex

  3. Chuỗi thời gian tổng hợp MongoDB

  4. MongoDB $ exp

  5. lỗi kết nối với máy chủ:không thể kết nối với máy chủ:lỗi lựa chọn máy chủ:cấu trúc liên kết hiện tại hết thời gian chờ lựa chọn máy chủ:Loại:Máy chủ đơn