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

Truy vấn Mongo trên nhiều trường của tài liệu con

Đây thực sự là mã $ elemMatch toán tử cho mặc dù nó thường bị sử dụng sai. Về cơ bản, nó thực hiện các điều kiện truy vấn trên mỗi phần tử "bên trong" mảng. Tất cả các đối số MongoDB là một hoạt động "và" trừ khi được gọi một cách rõ ràng theo cách khác:

db.collection.find({ "arr": { "$elemMatch": { "name": "b", "num": 2  } } })

Có thể bạn cũng muốn "chiếu" ở đây nếu bạn chỉ mong đợi trường phù hợp chứ không phải toàn bộ tài liệu:

db.collection.find(
    { "arr": { "$elemMatch": { "name": "b", "num": 2  } } },
    { "arr.$": 1 }
)

Cuối cùng để giải thích lý do tại sao lần thử thứ hai của bạn không hoạt động, hãy truy vấn sau:

db.collection.find({
    "arr": [
        { "name": "b", "num": 2 }
    ]
})

Không khớp với bất kỳ điều gì vì không có tài liệu thực tế nào trong đó "arr" chứa một phần tử số ít khớp chính xác với các điều kiện của bạn.

Ví dụ đầu tiên của bạn không thành công ..:

db.collection.find({
    $and: [
        { "arr.name": "b" },
        { "arr.num": 2 }
    ]
});

Bởi vì có một số phần tử mảng thỏa mãn các điều kiện và điều này không chỉ được coi là cả hai điều kiện đều áp dụng cho cùng một phần tử. Đó là những gì $ elemMatch thêm và khi bạn cần thêm một điều kiện để phù hợp, thì đây là nơi bạn sử dụng nó.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb:Chuyển đổi không được hỗ trợ từ mảng sang objectId trong $ convert không có giá trị onError

  2. Cập nhật trường con trong tài liệu mongoDB bằng findOne và lưu

  3. Đăng một hình ảnh sử dụng binairy và các dữ liệu khác

  4. Đào tạo không thành công - Học máy AWS

  5. Java:Làm cách nào để chèn một hashmap vào MongoDB?