I am designing a backend for outlet application and i need to write a query to display single outlet images based on image uploaded by the outlet owner. I also need a count of both, images uploaded by the user and images uploaded by the outlet owner. So, how do i achieve this using mongoDB aggregation query. Below is my query:
db.images.aggregate([
{
$match: {
'storeId': storeId,
'imageType': 1
}
},
{
$project: {
'_id': 0,
'image': 1,
'imageId': 1,
'caption': 1,
'likes': 1,
'dislikes': 1,
'uploadTime': 1,
'imageType': 1
}
},
{
$match: {
'storeId': storeId,
$or: [{ imageType: 1 }, { imageType: 3 }]
}
},
{
$count: "totalCount"
}
]
Below are the snapshot of sample documents in the DB:
[
{
"imageId": "siyaram_image_1",
"reviewId": "#review_id",
"storeId": "#store_id",
"username": "[email protected]",
"image": "reviews/siyaram_image_1.jpg",
"imageType": 1,
"likes": 0,
"dislikes": 0,
"status": 4
},
{
"imageId": "siyaram_image_2",
"reviewId": "#review_id",
"storeId": "#store_id",
"username": "[email protected]",
"image": "reviews/siyaram_image_2.jpg",
"imageType": 1,
"likes": 0,
"dislikes": 0,
"status": 4
},
{
"imageId": "siyaram_image_3",
"reviewId": "#review_id",
"storeId": "#store_id",
"username": "[email protected]",
"image": "reviews/siyaram_image_3.jpg",
"imageType": 3,
"likes": 0,
"dislikes": 0,
"status": 4
},
{
"imageId": "siyaram_image_4",
"reviewId": "#review_id",
"storeId": "#store_id",
"username": "[email protected]",
"image": "reviews/siyaram_image_4.jpg",
"imageType": 3,
"likes": 0,
"dislikes": 0,
"status": 4
},
{
"imageId": "siyaram_image_5",
"reviewId": "#review_id",
"storeId": "#store_id",
"username": "[email protected]",
"image": "reviews/siyaram_image_5.jpg",
"imageType": 3,
"likes": 0,
"dislikes": 0,
"status": 4
}
]
And the expected result:
{
"total_image_count": 5,
"images": [
{
"imageId": "siyaram_image_1",
"reviewId": "#review_id",
"storeId": "#store_id",
"username": "[email protected]",
"image": "reviews/siyaram_image_1.jpg",
"imageType": 1,
"likes": 0,
"dislikes": 0,
"status": 4
},
{
"imageId": "siyaram_image_2",
"reviewId": "#review_id",
"storeId": "#store_id",
"username": "[email protected]",
"image": "reviews/siyaram_image_2.jpg",
"imageType": 1,
"likes": 0,
"dislikes": 0,
"status": 4
}
]
}