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

Cách tìm kiếm mảng con trong MongoDB

Nếu bạn chỉ muốn một thì MongoDB có "ký hiệu dấu chấm" để truy cập các phần tử lồng nhau:

db.collection.find({ "to.email": "[email protected]" })

Và điều này sẽ trả về các tài liệu phù hợp:

Đối với thêm một trường làm điều kiện, hãy sử dụng $elemMatch nhà điều hành

db.collection.find(
    { "to": { 
        "$elemMatch": { 
            "email": "[email protected]",
            "name": "domains",
        }
    }}
)

Và bạn có thể "chiếu" một đĩa đơn khớp để chỉ trả về phần tử đó:

db.collection.find({ "to.email": "[email protected]" },{ "to.$": 1 })

Nhưng nếu bạn mong đợi nhiều hơn nữa hơn một phần tử phù hợp, sau đó bạn sử dụng khung tổng hợp:

db.collection.aggregate([
    // Matches the "documents" that contain this
    { "$match": { "to.email": "[email protected]" } },

    // De-normalizes the array
    { "$unwind": "$to" },

    // Matches only those elements that match
    { "$match": { "to.email": "[email protected]" } },

    // Maybe even group back to a singular document
    { "$group": {
        "_id": "$_id",
        "from_name": { "$first": "$name" },
        "to": { "$push": "$to" },
        "subject": { "$first": "$subject" }            
    }}

])

Tất cả các cách thú vị để so khớp và / hoặc "lọc" nội dung của một mảng để tìm các kết quả phù hợp nếu được yêu cầu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao lại là alert de [fine] d, và sau đó hai dòng lại không phải (Meteor)?

  2. Thuộc tính động với Rails và Mongoid

  3. Phân trang MongoDB trên mảng - Kiểm tra xem $ Slice có đến đầu mảng hay không

  4. mongodb lấy toàn bộ tài liệu từ một giá trị

  5. Truy vấn phạm vi cho phân trang MongoDB