1

Sample document structure is like:

{
    "_id" : "https://docs.mongodb.org/manual",
    "collection" : {
        "_id" : "collection",
        "urls" : [ 
            "https://docs.mongodb.org/manual/c1", 
            "https://docs.mongodb.org/manual/c2"
        ]
    },
    "collectionNew" : {
        "_id" : "collection1",
        "urls" : [ 
            "https://docs.mongodb.org/manual/c1New", 
            "https://docs.mongodb.org/manual/c2New"
        ]
    },
    "log" : {
        "_id" : "log",
        "urls" : [ 
            "https://docs.mongodb.org/manual/l1", 
            "https://docs.mongodb.org/manual/l2"
        ]
    }
}

I have multiple such documents in my collection. After finding document by

db.AutoSearch.find({"_id": "https://docs.mongodb.org/manual"})

i want to search all subdocuments under this with name like "collection"

SOLUTION

I changed my document structure to:

{
"_id" : "https://docs.mongodb.org/manual",
"contents" : [ 
    {
        "_id" : "connect",
        "urls" : [ 
            "https://docs.mongodb.org/manual/search/?query=connect"
        ]
    }, 
    {
        "_id" : "connection",
        "urls" : [ 
            "https://docs.mongodb.org/manual/search/?query=connection", 
            "https://docs.mongodb.org/manual/search/?query=connection%20pymongo"
        ]
    }
    {
        "_id" : "list",
        "urls" : [ 
            "https://docs.mongodb.org/manual/search/?query=listfiles", 
            "https://docs.mongodb.org/manual/search/?query=listdatabases", 
            "https://docs.mongodb.org/manual/search/?query=listcommands"
        ]
    }, 
    {
        "_id" : "log",
        "urls" : [ 
            "http://docs.mongodb.org/manual/tutorial/rotate-log-files/", 
            "http://docs.mongodb.org/manual/reference/log-messages/"
        ]
    }, 
    {
        "_id" : "index",
        "urls" : [ 
            "https://docs.mongodb.org/manual/search/?query=index-related%20commands"
        ]
    }
]}

Then by using mongoDB aggregate query

db.AutoSearch.aggregate([{$match:{ "_id": "https://docs.mongodb.org/manual"}}, 
                    {$unwind: '$contents'},
                    {$match:{"contents._id":/connect/}}])

I got the desired output.

codiacTushki
  • 750
  • 1
  • 9
  • 22
  • First you need to change your documents structure. After that you will find your happiness here: [Retrieve only the queried element in an object array in MongoDB collection](http://stackoverflow.com/questions/3985214/retrieve-only-the-queried-element-in-an-object-array-in-mongodb-collection) – styvane Oct 10 '15 at 06:58

0 Answers0