Mongo 关联查询、数组中的对象中的字段排序

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":[]

}

]

猜你喜欢

转载自www.cnblogs.com/Jenny-1/p/10552494.html