Monday, 15 April 2013

mongodb - Mongo - aggregate with multiple conditions -



mongodb - Mongo - aggregate with multiple conditions -

i have collection hold user's purchases stores , likes , dislikes got purchase friends. collection fields looks that:

{ "_id" : objectid("543e43cea7c481c4820ab014"), "user" : "542ea90fbb1e37b09f660980", "product" : "543e43cea7c481c4820ab013", "store" : "542e6fb1a2a8a7a071490555", "status" : "active", "dislikes" : 1, "likes" : 3, "addedat" : isodate("2014-10-15t09:52:14.661z") }

now, want next summaries:

get diff of (likes - dislikes) user x get diff of (likes - dislikes) user x store y get diff of (likes - dislikes) user x store y , product z

for #1, made:

[ {$group: {_id: '$user', rankdiff: {$sum: {$subtract: ['$likes', '$dislikes']}}}}, {$match : { _id: 'x'}} ],

im' getting proper results:

[ { "_id" : "542ea90fbb1e37b09f660980", "rankdiff" : 2 } ]

but when i'm trying #2 by:

[ {$group: {_id: '$user', rankdiff: {$sum: {$subtract: ['$likes', '$dislikes']}}}}, {$match : { _id: 'x'}, store: 'y'} ],

or #3 by:

[ {$group: {_id: '$user', rankdiff: {$sum: {$subtract: ['$likes', '$dislikes']}}}}, {$match : { _id: 'x'}, store: 'y', product: 'z'} ],

no results return.

is can please help me that? i'm doing wrong?

p.s. did mongoose straight robomongo via mongodb instance

found it, quesry syntax should be:

[ {$match : { user: 'x', store: 'y', product: 'z'}, {$group: {_id: '$user', rankdiff: {$sum: {$subtract: ['$likes', '$dislikes']}}}} ]

and working fine.

thanks!

mongodb mongoose

No comments:

Post a Comment