princess of persia
princess of persia

Reputation: 2232

Mongo query in nested fields

I have a DB which has records with nested fields like :

"requestParams" : { "query" : [ "tv9" ] }

I am using the following query to fetch these kind of records. However I am looking for a more general case wherein the field query matches /tv9/ which includes tv9 as part of any search. Like it should also return livetv9, movietv9, etc. Following query does not seem to work:

db.requestLog.findOne({url : /search.json/, requestParams: {$elemMatch: {query: /tv9/}}})

Upvotes: 0

Views: 622

Answers (1)

Remon van Vliet
Remon van Vliet

Reputation: 18625

$elemMatch is used to match partial document elements inside an array. Since you want to directly match on a string the use of this operator is inappropriate. Use this instead :

db.requestLog.findOne({url : /search.json/, 'requestParams.query': /tv9/})

Example :

mongos> db.test.save({r:{q:["tv9"]}})
mongos> db.test.save({r:{q:["tv"]}})
mongos> db.test.save({r:{q:["ltv9l"]}})
mongos> db.test.find({'r.q':/tv9/})
{ "_id" : ObjectId("4f5095d4ec991a74c16ba862"), "r" : { "q" : [ "tv9" ] } }
{ "_id" : ObjectId("4f5095deec991a74c16ba864"), "r" : { "q" : [ "ltv9l" ] } }

Upvotes: 1

Related Questions