shr7
shr7

Reputation: 173

How to filter from array in a mongo document

I have a collection in mongoDB with documents like:

{
    "_id" : ObjectId("some_id"),
    "name" : "name",
    "field1" : 123,
    "field2" : 234,
    "arr" : [ 
        {
            
            "a_num" : 3,
            "arr" : [ 
                "abc", 
                "def"
            ],
        }, 
        {
            
            "a_num" : 36,
            "arr" : [ 
                "hi"
            ],
        }, 
        {
            
            "a_num" : 34,
            "arr" : [ 
                "abc"
            ],
        }
    ]
}

While I'm using find() I don't want to get the arr elements where arr has only 1 element, that its value is "abc". E.g, for the above document, I'd like to get:

{
    "_id" : ObjectId("some_id"),
    "name" : "name",
    "field1" : 123,
    "field2" : 234,
    "arr" : [ 
        {
            
            "a_num" : 3,
            "arr" : [ 
                "abc", 
                "def"
            ],
        }, 
        {
            
            "a_num" : 36,
            "arr" : [ 
                "hi"
            ],
        }, 
    ]
}

Any idea how? Thanks!

Upvotes: 0

Views: 33

Answers (1)

Tom Slabbaert
Tom Slabbaert

Reputation: 22316

You'll need to use the aggregation framework with $filter, like so:

db.collection.aggregate([
  {
    $addFields: {
      arr: {
        $filter: {
          input: "$arr",
          cond: {
            $ne: [
              "$$this.arr",
              [
                "abc"
              ]
            ]
          }
        }
      }
    }
  }
])

Upvotes: 1

Related Questions