sql >> Database teknologi >  >> NoSQL >> MongoDB

Filtrer underarrayet af et array efter nogle kriterier

Du skal bare bruge et $filter inde i et $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 ] }
      }
    }
  }}
])

Producerer:

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

Jeg pakker det faktisk ind i et ekstra $filter for at fjerne enhver someArray poster, hvor den filtrerede subArray endte med at være tom som følge heraf. Kilometertal kan variere alt efter, hvad du vil gøre.




  1. MongoDB:Hvad er forbindelsespooling og timeout?

  2. 5 måder at kontrollere størrelsen på en samling i MongoDB

  3. Design Redis database tabel som SQL?

  4. Fjern dublet i MongoDB