nic*_*ick 3 sorting mongodb aggregation-framework
在我的MongoDB数据库中,我有一系列产品.每个产品都包含数组中的发布信息,例如
{
"name" : "foo",
"release" : [{
"region" : "GB",
"active" : "Y",
"date" : ISODate("2012-03-01T00:00:00Z")
}, {
"region" : "US",
"active" : "Y",
"date" : ISODate("2012-09-01T00:00:00Z")
}, {
"region" : "FR",
"active" : "N",
"date" : ISODate("2010-01-01T00:00:00Z")
}]
}
Run Code Online (Sandbox Code Playgroud)
我想查找GB区域中活动版本的所有产品,并按GB发布日期对结果进行排序.
我尝试使用以下方法:
db.product.find(
{ "release" : { "$elemMatch" : { "region" : "GB", "active" : "Y" } } }
).sort({ "release.date" : 1 });
Run Code Online (Sandbox Code Playgroud)
这会找到正确的产品,但不会按匹配元素的发布日期排序(而是在数组的最小发布日期排序).
从我到目前为止所看到的,看起来像匹配元素的属性排序是不可能的,这是正确的吗?
是否可以使用聚合框架完成,如果是这样的话?
以下是您可以运行以获得所需内容的聚合:
db.release.aggregate([
{$unwind:"$release"},
{$match:{"release.active":"Y", "release.region":"GB"}},
{$sort:{"release.date":1}}
])
Run Code Online (Sandbox Code Playgroud)
这将展开发布数组,根据您的条件匹配文档,并在发布日期对所选文档进行排序.