I have data below:
<code>[
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 10
},
{
"product": {
"name": "Date"
},
"category": "Fruit",
"price": 2.99,
"stock": 30
},
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 30
}
]
</code>
<code>[
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 10
},
{
"product": {
"name": "Date"
},
"category": "Fruit",
"price": 2.99,
"stock": 30
},
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 30
}
]
</code>
[
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 10
},
{
"product": {
"name": "Date"
},
"category": "Fruit",
"price": 2.99,
"stock": 30
},
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 30
}
]
Now I want to sort like first stock wise in ascending order and then apply alphabetical sorting like in case stocks have same values like 10, 10, 10 then It should sort by product.name Alphabetically (as in JSON) in ascending order also.
Expected Output:
<code>[
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 10
},
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 30
},
{
"product": {
"name": "Date"
},
"category": "Fruit",
"price": 2.99,
"stock": 30
}
]
</code>
<code>[
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 10
},
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 30
},
{
"product": {
"name": "Date"
},
"category": "Fruit",
"price": 2.99,
"stock": 30
}
]
</code>
[
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 10
},
{
"product": {
"name": "Apple"
},
"category": "Fruits",
"price": 2.99,
"stock": 30
},
{
"product": {
"name": "Date"
},
"category": "Fruit",
"price": 2.99,
"stock": 30
}
]
I tried the following aggregation pipeline, but it doesn’t produce the desired output:
<code>db.collection.aggregate([
{
$sort: {
"product.name": -1,
stock: -1
}
},
{
$project: {
_id: 0,
"product.name": 1,
category: 1,
price: 1,
stock: 1
}
}
])
</code>
<code>db.collection.aggregate([
{
$sort: {
"product.name": -1,
stock: -1
}
},
{
$project: {
_id: 0,
"product.name": 1,
category: 1,
price: 1,
stock: 1
}
}
])
</code>
db.collection.aggregate([
{
$sort: {
"product.name": -1,
stock: -1
}
},
{
$project: {
_id: 0,
"product.name": 1,
category: 1,
price: 1,
stock: 1
}
}
])
New contributor
mongoPioneer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
1