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

MongoDB elemMatch không hoạt động như mong đợi

Không có gì sai với hoạt động của $elemMatch . Nó hoạt động như mong đợi. Tài liệu cũng cho biết:

Theo nguyên tắc chung bất cứ khi nào bạn chiếu một array sử dụng $elemMatch , chỉ một trong số các phần tử sẽ được chiếu tối đa . Nếu không có phần tử nào trong mảng phù hợp, trường sẽ không được chiếu.

Vì vậy, kết quả bạn nhận được là chính xác, chỉ có mục đầu tiên trong mảng phù hợp với điều kiện trong $elemMatch sẽ được projected .

{
    "_id" : ObjectId("5439a2992ea8cc0f70feef2d"),
    "Statuses" : [{
        ....
        "StatusID": NumberLong(525623822633172993),
        ....
    }]
}

Bạn có thể thử thay đổi thứ tự của tài liệu trong mảng trạng thái và có thể nhận được một tài liệu phù hợp khác nếu tài liệu đó xuất hiện trước các tài liệu phù hợp khác trong mảng.

Tham khảo: $ elemMatch

Theo yêu cầu của bạn, nếu bạn muốn tất cả các phần tử mảng phù hợp trong kết quả của mình, bạn cần thực hiện một phép toán tổng hợp.

  • Match những tài liệu có _id bắt buộc và những tài liệu đó chứa tài liệu phụ trạng thái mà chúng tôi đang tìm kiếm.
  • unwind mảng trạng thái.
  • Một lần nữa match các tài liệu được giải nén riêng lẻ.
  • Cuối cùng là nhóm group các tài liệu phù hợp theo _id .

Mã:

db.collection.aggregate([
{$match:{ "_id": ObjectId("5439a2992ea8cc0f70feef2d"),
          "Statuses.StatusID":{$gte : NumberLong(525623822633172993)}}},
{$unwind:"$Statuses"},
{$match:{"Statuses.StatusID":{$gte : NumberLong(525623822633172993)}}},
{$group:{"_id":"$_id",statuses:{$push:"$Statuses"}}}
])

sẽ cung cấp cho bạn tất cả các tài liệu con phù hợp trong mảng.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Có thể nắm bắt các sự kiện TTL với Change Stream để mô phỏng bộ lập lịch (cronjob) không?

  2. Thứ tự phản hồi cho MongoDB $ trong truy vấn?

  3. Trả về phần tử đầu tiên nếu không tìm thấy kết quả phù hợp nào trong mảng

  4. Làm cách nào để thêm trường cuối cùng vào bộ sưu tập tài liệu spring-data-mongodb hiện có?

  5. MongoDB:Sắp xếp dữ liệu khi sử dụng DBcollection find