MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Filtruj podtablicę tablicy według pewnych kryteriów

Potrzebujesz tylko $filter wewnątrz $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 ] }
      }
    }
  }}
])

Produkuje:

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

Właściwie zawijam to w dodatkowy $filter aby usunąć dowolną someArray wpisy, w których filtrowany subArray w rezultacie był pusty. Przebieg może się różnić w zależności od tego, co chcesz zrobić.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak rozwiązać MongoError:pula zniszczona podczas łączenia z CosmosDB

  2. Mongodb findAndModify węzeł js

  3. Usuń wpis z tablicy za pomocą sterownika MongoDB-Java

  4. mongodb nodejs - konwertowanie struktury kołowej

  5. Klucze obce w mongo?