sql >> Databáze >  >> NoSQL >> MongoDB

Filtrujte podpole pole podle některých kritérií

Potřebujete pouze $filter uvnitř $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 ] }
      }
    }
  }}
])

Vyrábí:

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

Ve skutečnosti jsem to zabalil do dalšího $filter k odstranění všech someArray záznamy, kde je filtrované subArray ve výsledku skončilo prázdnotou. Počet najetých kilometrů se může lišit podle toho, co chcete dělat.




  1. Zkontrolujte, zda existuje databáze mongodb?

  2. Redis a Memcache nebo jen Redis?

  3. autentizace mongo z příkazového řádku se nezdaří

  4. Jak získat zpět smazaný prostor bez `db.repairDatabase()`?