'How to sort records based on the value that is inside an object in MongoDb
Consider the following MongoDB Collection
[
{
_id: 123123,
name: "abc"
topic: {
asda: "Z"
}
},
{
_id: 123123,
name: "abc"
topic: {
dasd: "P"
}
},{
_id: 123123,
name: "abc"
topic: {
qwer: "A"
}
}
]
After performing a query need records sorted(case-insensitively) based on the value inside the topic object.
Note: The key inside the topic object will be always a different and unique string for every record
So the result records should be as follows
[
{
_id: 123123,
name: "abc"
topic: {
qwer: "A"
}
},
{
_id: 123123,
name: "abc"
topic: {
dasd: "P"
}
},{
_id: 123123,
name: "abc"
topic: {
qwer: "Z"
}
}
]
Thanks in Advance :)
Solution 1:[1]
If you want to get the results sorted by the value of an unknown key, you can use $objectToArray
db.collection.aggregate([
{
$addFields: {
topicArr: {
$objectToArray: "$topic"
}
}
},
{
$sort: {
"topicArr.v": 1
}
},
{
$unset: "topicArr"
}
])
As you can see on this playground example
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |