1.文档格式 "Values" : [ { "key" : "姓名", "value" : "jenny" }, { "key" : "年龄", "value" : "20" }] 2.查询 将values字段平铺到根。并将年龄字段值转换成int。按姓名降序 db.getCollection('Users').aggregate([ {$addFields: { ValueObj: { $arrayToObject: { $map: { input: "$Values", as: "field", //单个条件 // in: {$cond:[{$eq:["$$field.key","年龄"]},["$$field.key", NumberInt("$$field.value")],["$$field.key", "$$field.value"]]} //多个条件。3.4版本 in:{$switch:{branches:[{case:{$eq:["$$field.key","年龄"]},then:["$$field.key", NumberInt("$$field.value")]},
{case:{$eq:["$$field.key","年龄"]},then:["$$field.key", NumberInt("$$field.value")]}],
default:["$$field.key", "$$field.value"]}} } } } } }, {$addFields:{"ValueObj.Values":"$Values"}}, {$replaceRoot:{newRoot:"$ValueObj"}}, {$sort:{"姓名":-1}}, ]) 3.结果 "姓名" : "jenny", "年龄" : 20, "Values" : [ { "key" : "姓名", "value" : "jenny" }, { "key" : "年龄", "value" : "20" }]