如何在 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
    }
}])