【问题标题】:How can I sort by $elemMatch in MongoDB?如何在 MongoDB 中按 $elemMatch 排序?
【发布时间】:2017-06-27 10:00:35
【问题描述】:

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

我想查找所有在 GB 地区有效发布的产品,并按 GB 发布日期对结果进行排序。

我尝试使用:

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

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

从我目前阅读的内容来看,似乎无法按匹配元素的属性进行排序,这是正确的吗?

可以用aggregation framework 完成吗?如果可以,怎么做?

【问题讨论】:

    标签: mongodb sorting aggregation-framework


    【解决方案1】:

    这是您可以运行以获得所需内容的聚合:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2012-10-24
      • 1970-01-01
      • 2023-04-02
      • 2017-05-28
      相关资源
      最近更新 更多