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

Cách lọc mảng trong tài liệu con với MongoDB

Sử dụng aggregate là cách tiếp cận đúng, nhưng bạn cần $unwind danh sách list mảng trước khi áp dụng $match để bạn có thể lọc các phần tử riêng lẻ và sau đó sử dụng $group để kết hợp nó lại với nhau:

db.test.aggregate([
    { $match: {_id: ObjectId("512e28984815cbfcb21646a7")}},
    { $unwind: '$list'},
    { $match: {'list.a': {$gt: 3}}},
    { $group: {_id: '$_id', list: {$push: '$list.a'}}}
])

kết quả đầu ra:

{
  "result": [
    {
      "_id": ObjectId("512e28984815cbfcb21646a7"),
      "list": [
        4,
        5
      ]
    }
  ],
  "ok": 1
}

Bản cập nhật MongoDB 3.2

Bắt đầu với bản phát hành 3.2, bạn có thể sử dụng $filter mới toán tử tổng hợp để thực hiện điều này hiệu quả hơn bằng cách chỉ đưa vào danh sách list các yếu tố bạn muốn trong $project :

db.test.aggregate([
    { $match: {_id: ObjectId("512e28984815cbfcb21646a7")}},
    { $project: {
        list: {$filter: {
            input: '$list',
            as: 'item',
            cond: {$gt: ['$$item.a', 3]}
        }}
    }}
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Docker:thay đổi thư mục nơi lưu trữ khối lượng docker

  2. Cách unhideIndex () hoạt động trong MongoDB

  3. Chỉ mục trong MongoDB

  4. Liên kết &Tạo MongoDB tham gia bằng SQL:Phần 1

  5. Làm cách nào để kiểm tra xem một trường mảng có chứa một giá trị duy nhất hay một mảng khác trong MongoDB?