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"
}]