如何在 spring mongo 中的两个单独的嵌套对象之间进行排序
How to sort between two separate nested object in spring mongo
假设我有以下 JSON 对象
[
{
"id":"1",
"fruitName":{
"name":"Apple",
"color":"Red"
}
},
{
"id":"2",
"fruitName":{
"name":"Mango",
"color":"Yellow"
}
},
{
"id":"3",
"vegetableName":{
"name":"Cabbage",
"color":"Green"
}
}
]
我想按名称字母顺序对它们进行排序,它们位于两个不同的字段(fruitName 和 vegetableName)中。
有没有办法在 Spring Mongo 中做到这一点而不修改 JSON 对象,所以输出会像这样。
[
{
"id":"1",
"fruitName":{
"name":"Apple",
"color":"Red"
}
},
{
"id":"3",
"vegetableName":{
"name":"Cabbage",
"color":"Green"
}
},
{
"id":"2",
"fruitName":{
"name":"Mango",
"color":"Yellow"
}
}
]
是的,您可以在不修改 JSON 对象的情况下使用带条件的投影来做到这一点。
db.collection.aggregate([{
$project: {
id: 1,
fruitName: 1,
vegetableName: 1,
name: { $ifNull: ['$fruitName.name', '$vegetableName.name'] },
}
}, {
$sort: {
name: 1
}
}])
如果您使用的是 mongodb 版本 3.4+,那么您也可以使用 addFields。
db.collection.aggregate([{
$addFields: {
name: { $ifNull: ['$fruitName.name', '$vegetableName.name'] }
}
}, {
$sort: {
name: 1
}
}])
假设我有以下 JSON 对象
[
{
"id":"1",
"fruitName":{
"name":"Apple",
"color":"Red"
}
},
{
"id":"2",
"fruitName":{
"name":"Mango",
"color":"Yellow"
}
},
{
"id":"3",
"vegetableName":{
"name":"Cabbage",
"color":"Green"
}
}
]
我想按名称字母顺序对它们进行排序,它们位于两个不同的字段(fruitName 和 vegetableName)中。
有没有办法在 Spring Mongo 中做到这一点而不修改 JSON 对象,所以输出会像这样。
[
{
"id":"1",
"fruitName":{
"name":"Apple",
"color":"Red"
}
},
{
"id":"3",
"vegetableName":{
"name":"Cabbage",
"color":"Green"
}
},
{
"id":"2",
"fruitName":{
"name":"Mango",
"color":"Yellow"
}
}
]
是的,您可以在不修改 JSON 对象的情况下使用带条件的投影来做到这一点。
db.collection.aggregate([{
$project: {
id: 1,
fruitName: 1,
vegetableName: 1,
name: { $ifNull: ['$fruitName.name', '$vegetableName.name'] },
}
}, {
$sort: {
name: 1
}
}])
如果您使用的是 mongodb 版本 3.4+,那么您也可以使用 addFields。
db.collection.aggregate([{
$addFields: {
name: { $ifNull: ['$fruitName.name', '$vegetableName.name'] }
}
}, {
$sort: {
name: 1
}
}])