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

Lọc mảng con của một mảng theo một số tiêu chí

Bạn chỉ cần một $filter bên trong $map :

db.junk.aggregate([
  { "$project": {
    "someArray": {
      "$filter": {
        "input": {
          "$map": {
            "input": "$someArray",
             "as": "some",
             "in": {
               "subId": "$$some.subId",
               "subArray": {
                 "$filter": {
                   "input": "$$some.subArray",
                   "as": "sub",
                   "cond": { "$ne": [ "$$sub.filterMe", "YES" ] }
                 }
               }
             }
          }
        },
        "as": "some",
        "cond": { "$gt": [ { "$size": "$$some.subArray" }, 0 ] }
      }
    }
  }}
])

Sản xuất:

{
        "_id" : "someId",
        "someArray" : [
                {
                        "subId" : 1,
                        "subArray" : [
                                {
                                        "field1" : "A",
                                        "filterMe" : "NO"
                                }
                        ]
                },
                {
                        "subId" : 2,
                        "subArray" : [
                                {
                                        "field1" : "D",
                                        "filterMe" : "NO"
                                }
                        ]
                }
        ]
}

Tôi thực sự bọc nó trong một $filter bổ sung để xóa bất kỳ someArray các mục trong đó subArray đã lọc kết quả là kết quả là trống rỗng. Số dặm có thể thay đổi tùy thuộc vào việc bạn muốn làm gì.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB findOneAndUpdate ()

  2. Ứng dụng giống Twitter sử dụng MongoDB

  3. MongoDB $ mod

  4. sự khác biệt giữa tổng hợp ($ match) và tìm kiếm, trong MongoDB?

  5. Làm cách nào để loại bỏ cơ sở dữ liệu MongoDB khỏi dòng lệnh?