node.js - Returning only first element of a sub array with $elemMatch -
i'm using node , mongoose, , have schema looks this:
var subscriberschema = new schema({ 'user': [{ type: mongoose.schema.types.objectid, ref: 'user' }], 'level': { type: string, enum: [ 'owner', 'sub', 'commenter', 'poster' ] } 'dateadded': { type: date, default: date.now } }); // grouping schema var groupschema = new schema({ 'groupowner': [{ type: mongoose.schema.types.objectid, ref: 'user' }], 'groupname': string, 'subscribers': [subscriberschema], }); i query grouping find groups user (stored in req.user._id via token authentication) subscriber (i.e. _id in subscribers array), , homecoming single subscribers array element _id.
i've read mongo documentation on $elemmatch seems need, , built query below. returns info want, returns elements of subscribers array. how can homecoming single element of subscribers array matches req.user._id?
current query, returns elements of subscribers:
grouping .find( { "subscribers.user": req.user._id}, { subscribers: { $elemmatch: { user: req.user._id }}} ) .sort('groupname') .populate('groupowner', 'email firstname lastname') .populate('subscribers.user', 'email firstname lastname') .exec(function(err, data) { if (err) { logger.error('unable retrieve groups user: ' + err.message); res.status(500) } else { res.json(data); } }); this returns next subscribers (via util.inspect(data[0].subscribers)):
subscribers [{ user: [ { _id: 1234, email: 'me@here.com', firstname: 'testy', lastname: 'testelson' } ] } user: [ { _id: 5678, email: 'you@there.com', firstname: 'biggy', lastname: 'smalls' } ] }] based on $elemmatch docs, assume see user 1234 since that's record matches req.user._id. doing wrong here?
thanks!
in projection parameter, utilize dollar operator:
{"user.$": 1} this homecoming grouping single object in 'subscribers' array.
node.js mongodb mongoose
No comments:
Post a Comment