我们有一个文档,其中包含一个数组,其中包含每个文档可能存在或不存在的不同数量的属性。
例如:
{
"_id" : ObjectId("570ca1a61992d1f7603b997e"),
"Name" : "Product 1",
"LastUpdated" : {
"DateTime" : ISODate("2016-04-12T07:20:07.041+0000"),
"Ticks" : NumberLong(635960424070414818)
},
"Attributes" : [
"ProductType:Shirt",
"Colour:Red",
"Year:2016",
"Gender:Boys"
]
}
我们目前按顶级属性排序,但现在需要按年份等属性进行排序。
如何在不修改我们目前的文档结构的情况下实现这一目标?没有聚合可能吗?
我已经尝试使用聚合框架来展开属性,匹配相关属性然后排序哪些有效但是我们留下的文档只包含展开的匹配属性,而不是完整的数组。我不确定是否有办法在放松后获取完整的文档,或者我们是否可以在另一场比赛中使用生成的匹配文档ID?
db.Product.aggregate(
[
{
$match: {
"Attributes" : "Colour:Red"
}
},
{
$unwind: "$Attributes"
},
{
$match: {
"Attributes" : /^Year:/
}
},
{
$sort: {
"Attributes" : -1
}
}
]
);