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
Post a Comment