1.集合(Msg)
{
"_id" : "1",
"Name" : "jenny",
"Values" : [
{
"key" : "地址",
"value" : "x"
},
{
"key" : "爱好",
"value" : ""
}
],
"Relation":{
"Books":[
{"BookId":"2"}
]
}
"CreateUserName" : "jenny",
"LastOperateDate" : ISODate("2018-07-27T17:31:28.170+08:00")
}
{
"_id" : "3",
"Name" : "jenny1",
"Values" : [
{
"key" : "地址",
"value" : "a"
},
{
"key" : "爱好",
"value" : ""
}
],
"Relation":{
"Books":[
{"BookId":"2"}
]
}
"CreateUserName" : "jenny",
"LastOperateDate" : ISODate("2018-07-27T17:31:28.170+08:00")
}
{
"_id" : "2",
"Name" : "图书",
"Values" : [
{
"key" : "出版地址",
"value" : "xxx区"
},
{
"key" : "出版时间",
"value" : ""
}
]
"CreateUserName" : "jenny",
"LastOperateDate" : ISODate("2018-07-27T17:31:28.170+08:00")
}
2.获取作者及其所有图书信息。并按Values内key排序
db.getCollection('Msg').aggregate([
{$addFields: { ValueObj: { $arrayToObject: { $map: { input: "$Values", as: "field", in: ["$$field.key", "$$field.value"] } } } } },
{$lookup:{from:"Msg",localField:"Relation.Book.BookId",foreignField:"_id",as:"Books"}},
{$addFields:{"ValueObj._id":"$_id","ValueObj.Values":"$Values","ValueObj.Books":"$Books"}},
{$replaceRoot:{newRoot:"$ValueObj"}},
{$sort:{"地址":-1}},
])
结果:
[
{
"地址":"x",
"爱好":"",
"_id":"1",
"Values" : [
{
"key" : "地址",
"value" : "x"
},
{
"key" : "爱好",
"value" : ""
}
],
"Books":[
{
"_id" : "2",
"Name" : "图书",
"Values" : [
{
"key" : "出版地址",
"value" : "xxx区"
},
{
"key" : "出版时间",
"value" : ""
}
]
},
{
"地址":"a",
"爱好":"",
"_id":"3",
"Values" : [
{
"key" : "地址",
"value" : "a"
},
{
"key" : "爱好",
"value" : ""
}
],
"Books":[]
}
]