Kumar Sourav
Kumar Sourav

Reputation: 419

Searching with dynamic field name in MongoDB

I have a situation where records in Mongo DB are like :

{
"_id" : "xxxx",
"_class" : "xxxx",
"orgId" : xxx,
"targetKeyToOrgIdMap" : {
    "46784_56139542ecaa34c13ba9e314" : 46784,
    "47530_562f1bc5fc1c1831d38d1900" : 47530,
    "700004280_56c18369fc1cde1e2a017afc" : 700004280


   },
}

I have to find out the records where child nodes of targetKeyToOrgIdMap has a particular set of values. That means, I know what the value is going to be there in the record in "46784_56139542ecaa34c13ba9e314" : 46784 part. And the field name is variable, its combination of the value and some random string.

In above example, I have 46784, and I need to find all the records which have 46784 in that respective field.

Is there any way I can fire some regex or something like that or by using any other mean where I would get the records which has the value I need in the child nodes of the field targetKeyToOrgIdMap.

Thanks in advance

Upvotes: 4

Views: 3128

Answers (1)

Erik
Erik

Reputation: 3048

You could use MongoDB's $where like this:

db.myCollection.find( { $where: function() { 
  for (var key in obj.targetKeyToOrgIdMap) {
    if (obj.targetKeyToOrgIdMap[key] == 46784){
      return true;
    }
  }
}}).each { obj ->
  println obj
}

But be aware that this will require a full table scan where the function is executed for each document. See documentation.

Upvotes: 2

Related Questions