如何根据 MongoDb 中对象内的值对记录进行排序

How to sort records based on the value that is inside an object in MongoDb

考虑以下MongoDB集合

[
    {
        _id: 123123,
        name: "abc"
        topic: {
            asda: "Z"
        }
    },
    {
        _id: 123123,
        name: "abc"
        topic: {
            dasd: "P"
        }
    },{
        _id: 123123,
        name: "abc"
        topic: {
            qwer: "A"
        }
    }
]

执行查询后,需要根据主题对象中的值对记录进行排序(不区分大小写)。

注意:主题对象中的键对于每条记录始终是不同且唯一的字符串

所以结果记录应该如下

[
    {
        _id: 123123,
        name: "abc"
        topic: {
            qwer: "A"
        }
    },
    {
        _id: 123123,
        name: "abc"
        topic: {
            dasd: "P"
        }
    },{
        _id: 123123,
        name: "abc"
        topic: {
            qwer: "Z"
        }
    }
]

提前致谢:)

如果你想获得按未知键的值排序的结果,你可以使用$objectToArray

db.collection.aggregate([
  {
    $addFields: {
      topicArr: {
        $objectToArray: "$topic"
      }
    }
  },
  {
    $sort: {
      "topicArr.v": 1
    }
  },
  {
    $unset: "topicArr"
  }
])

如你所见playground example