MongoDB querying by sub-document value not working as expected -


i have 2 schemas, profile , levelofneed.

profile {     "_id" : objectid("56d35960a695dfa140137fca"),     . . .     "levelofneedserviced" : objectid("56d35828a695dfa140137fc7") }  level of need {     "_id" : objectid("56d35828a695dfa140137fc7"),     "sortorder" : 2,     "description" : "moderate needs",     "additionalcost" : 3,     "__v" : 0 } 

i have 4 documents levelofneed. need select of profile documents levelofneedserviced.sortorder >= value.

example:

db.getcollection('profiles').find({     'levelofneedserviced.sortorder': { $gte: 2 } }) 

given data, expect see example profile, returns no results. doing wrong?


update 1

previously, running mongodb 3.0.9. i've since upgraded 3.2.3, i'm still getting same results. according docs, should able query on embedded document field value.


update 2

the aggregate function solution works expected, since had array of levelofneed objects, able use related documents needed using $in operator.

unfortunately mongodb not support joins until version 3.2. in version 3.2 provides $lookup aggregation operator lookup referenced documents across collections.

you use below:

db.profile.aggregate([ {   $lookup:{            "from":"levelofneed",            "localfield":"levelofneedserviced",            "foreignfield":"_id",            "as":"joined"           } }, {   $match:{           "joined.sortorder":{$gte:2}          } }, {   $project:{"levelofneedserviced":1,...} //include things want project. } ]) 

your code:

db.getcollection('profiles').find({     'levelofneedserviced.sortorder': { $gte: 2 } }) 

does not work intended because, field levelofneedserviced identified field containing objectid , not resolved levelofneed document.


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -