Ashima Walia
Ashima Walia

Reputation: 33

Select specific fields in a nested map object schema in Mongo DB

Eg:- Following is a sample document in a collection 'clubs',

Sample document

{
    "_id" : ObjectId("5cb8218ce2911e7c707e27fa"),
    "name" : "name 1",
    "members" : {
        "user_1" : {
            "created" : ISODate("2019-04-18T07:04:44.748Z"),
            "lastActive" : 1555584757282,
            "state" : 1,
            "unreadMessages" : 0,
            "userId" : "user_1_id"
        },
        "user_2" : {
            "lastActive" : 1555588409686,
            "state" : 1,
            "unreadMessages" : 0,
            "userId" : "user_2_id"
        }
    }
}

Mongo DB query should return the following fields :-

Desired Output-

{
    {
        "_id" : ObjectId("5cb8218ce2911e7c707e27fa"),
        "name" : "name 1",
        "members" : {
            "user_1" : {
                "lastActive" : 1555584757282
            },
            "user_2" : {
                "lastActive" : 1555588409686
            }
         }
    }
}

Upvotes: 3

Views: 781

Answers (1)

Ashh
Ashh

Reputation: 46441

You can use below aggregation

db.collection.aggregate([
  { "$addFields": {
    "members": {
      "$arrayToObject": {
        "$map": {
          "input": { "$objectToArray": "$members" },
          "in": {
            "k": "$$this.k",
            "v": { "lastActive": "$$this.v.lastActive" }
          }
        }
      }
    }
  }}
])

Example

Upvotes: 1

Related Questions