1

MongoDB query with elemMatch for nested array data matching from inside objects. Here we have three project objects and each contains an array of exams with multiple objects. Here when "project_id" : ObjectId("5b6959e3dc68d21c6613c82d") , The "exams" array contain two times "writer.user_id":ObjectId("5b6959e3dc68d21c6613c77d") how could i get these two data filtered from the first project object ?

db.exams.insert([{
"project_id" : ObjectId("5b6959e3dc68d21c6613c82d"),
"exams" : [ 
    {
        "allotment_type" : "manual",
        "exam_id" : 1,
        "topic" : "something",
        "word_count" : 5,
        "key_word_density" : 2,
        "writer" : {
            "user_id" : ObjectId("5b6959e3dc68d21c6613c77d"),
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "editor" : {
            "user_id" : 1,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "manager" : {
            "user_id" : 1,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        }
    }, 
    {
        "allotment_type" : "manual",
        "exam_id" : 2,
        "topic" : "something",
        "word_count" : 5,
        "key_word_density" : 2,
        "writer" : {
            "user_id" : ObjectId("5b6959e3dc68d21c6613c77e"),
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "editor" : {
            "user_id" : 2,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "manager" : {
            "user_id" : 2,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        }
    }, 
    {
        "allotment_type" : "manual",
        "exam_id" : 3,
        "topic" : "something",
        "word_count" : 5,
        "key_word_density" : 2,
        "writer" : {
            "user_id" : ObjectId("5b6959e3dc68d21c6613c77d"),
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "editor" : {
            "user_id" : 3,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "manager" : {
            "user_id" : 3,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        }
    }]

},
{
"project_id" : ObjectId("5b6959e3dc68d21c6613c82e"),
"exams" : [ 
    {
        "allotment_type" : "manual",
        "exam_id" : 1,
        "topic" : "something",
        "word_count" : 5,
        "key_word_density" : 2,
        "writer" : {
            "user_id" : ObjectId("5b6959e3dc68d21c6613c77d"),
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "editor" : {
            "user_id" : 1,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "manager" : {
            "user_id" : 1,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        }
    }, 
    {
        "allotment_type" : "manual",
        "exam_id" : 2,
        "topic" : "something",
        "word_count" : 5,
        "key_word_density" : 2,
        "writer" : {
            "user_id" : ObjectId("5b6959e3dc68d21c6613c77e"),
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "editor" : {
            "user_id" : 2,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "manager" : {
            "user_id" : 2,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        }
    }, 
    {
        "allotment_type" : "manual",
        "exam_id" : 3,
        "topic" : "something",
        "word_count" : 5,
        "key_word_density" : 2,
        "writer" : {
            "user_id" : ObjectId("5b6959e3dc68d21c6613c77c"),
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "editor" : {
            "user_id" : 3,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "manager" : {
            "user_id" : 3,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        }
    }]

},
{
"project_id" : ObjectId("5b6959e3dc68d21c6613c82f"),
"exams" : [ 
    {
        "allotment_type" : "manual",
        "exam_id" : 1,
        "topic" : "something",
        "word_count" : 5,
        "key_word_density" : 2,
        "writer" : {
            "user_id" : ObjectId("5b6959e3dc68d21c6613c77d"),
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "editor" : {
            "user_id" : 1,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "manager" : {
            "user_id" : 1,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        }
    }, 
    {
        "allotment_type" : "manual",
        "exam_id" : 2,
        "topic" : "something",
        "word_count" : 5,
        "key_word_density" : 2,
        "writer" : {
            "user_id" : ObjectId("5b6959e3dc68d21c6613c77e"),
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "editor" : {
            "user_id" : 2,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "manager" : {
            "user_id" : 2,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        }
    }, 
    {
        "allotment_type" : "manual",
        "exam_id" : 3,
        "topic" : "something",
        "word_count" : 5,
        "key_word_density" : 2,
        "writer" : {
            "user_id" : ObjectId("5b6959e3dc68d21c6613c77c"),
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "editor" : {
            "user_id" : 3,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        },
        "manager" : {
            "user_id" : 3,
            "versions" : [ 
                {
                    "id" : 1,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 2,
                    "file_path" : "abcd"
                }, 
                {
                    "id" : 3,
                    "file_path" : "abcd"
                }
            ]
        }
    }]

}]);
ABDUL JAMAL
  • 452
  • 7
  • 12

1 Answers1

1

You can try with $filter aggregation

db.collection.aggregate([
  { "$project": {
    "exams": {
      "$filter": {
        "input": "$exams",
        "as": "exam",
        "cond": {
          "$eq": [ "$$exam.writer.user_id", ObjectId("5b6959e3dc68d21c6613c77d") ]
        }
      }
    }
  }}
])
Ashh
  • 44,693
  • 14
  • 105
  • 132