MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Филтрирайте подмасива на масив по някои критерии

Трябва ви само $filter вътре в $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 ] }
      }
    }
  }}
])

Произвежда:

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

Всъщност увивам това в допълнителен $filter за да премахнете всеки someArray записи, където филтрираният subArray в резултат се оказа празен. Пробегът може да варира в зависимост от това, което искате да направите.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb:Предимство от използването на ObjectID спрямо низ, съдържащ идентификатор?

  2. Автоматизиране на MongoDB със SaltStack

  3. Mongoose Mongodb запитва масив от обекти

  4. Защо MongoDB – 10 причини да научите MongoDB за 2022 г

  5. Mongoose findOneAndUpdate Upsert _id null?