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

Mongoose - tìm các tài liệu phụ theo tiêu chí

Bạn có thể sử dụng $elemMatch dưới dạng toán tử chiếu truy vấn trong các phiên bản MongoDB gần đây nhất. Từ shell mongo:

db.parents.find(
    {'children.age': {$gte: 18}},
    {children:{$elemMatch:{age: {$gte: 18}}}})

Điều này lọc các tài liệu dành cho trẻ nhỏ hơn ra khỏi children mảng:

{ "_id" : ..., "children" : [ { "name" : "Margaret", "age" : 20 } ] }
{ "_id" : ..., "children" : [ { "name" : "John", "age" : 22 } ] }

Như bạn có thể thấy, trẻ em vẫn được nhóm bên trong tài liệu mẹ của chúng. Truy vấn MongoDB trả về tài liệu từ bộ sưu tập. Bạn có thể sử dụng $unwind của khung tổng hợp phương pháp chia chúng thành các tài liệu riêng biệt:

> db.parents.aggregate({
    $match: {'children.age': {$gte: 18}}
}, {
    $unwind: '$children'
}, {
    $match: {'children.age': {$gte: 18}}
}, {
    $project: {
        name: '$children.name',
        age:'$children.age'
    }
})
{
    "result" : [
        {
            "_id" : ObjectId("51a7bf04dacca8ba98434eb5"),
            "name" : "Margaret",
            "age" : 20
        },
        {
            "_id" : ObjectId("51a7bf04dacca8ba98434eb6"),
            "name" : "John",
            "age" : 22
        }
    ],
    "ok" : 1
}

Tôi lặp lại $match mệnh đề về hiệu suất:lần đầu tiên thông qua nó loại bỏ các bậc cha mẹ có không trẻ em từ 18 tuổi trở lên, vì vậy $unwind chỉ xem xét các tài liệu hữu ích. $match thứ hai loại bỏ $unwind đầu ra không khớp và $project đưa thông tin của trẻ em từ các tài liệu phụ lên cấp cao nhất.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ arrayElemAt

  2. Cách tối ưu hóa Truy vấn trong MongoDB bằng cách sử dụng $ in so với $ hoặc

  3. Nhận dữ liệu từ bộ sưu tập b không có trong bộ sưu tập a trong truy vấn trình bao MongoDB

  4. Có bất kỳ công cụ nào để ước tính kích thước chỉ mục trong MongoDB không?

  5. Công tắc MongoDB $