如何在 MongoDB 中按 $elemMatch 排序?

2024-02-27

在我的 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")
    }]
}

我想要查找在英国区域中有效发布的所有产品,并按英国发布日期对结果进行排序。

我尝试使用以下方法来做到这一点:

db.product.find(
  { "release" : { "$elemMatch" : { "region" : "GB", "active" : "Y" } } }
).sort({ "release.date" : 1 });

这会找到正确的产品,但不会按匹配元素的发布日期排序(而是按数组中的最小发布日期排序)。

从我到目前为止所读到的内容来看,似乎不可能按匹配元素的属性进行排序,这是正确的吗?

可以用聚合框架 http://docs.mongodb.org/manual/applications/aggregation/,如果是的话怎么办?


这是您可以运行以获得您想要的结果的聚合:

db.release.aggregate([
         {$unwind:"$release"},
         {$match:{"release.active":"Y", "release.region":"GB"}},
         {$sort:{"release.date":1}}
])

这将展开版本数组,根据您的条件匹配文档并按发布日期对选定的文档进行排序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 MongoDB 中按 $elemMatch 排序? 的相关文章

随机推荐