【问题标题】:Sort by embedded document按嵌入文档排序
【发布时间】:2013-03-27 08:10:35
【问题描述】:

我正在尝试按嵌入文档的日期对某些文档进行排序。我的文档如下所示:

[
    {
        name: 'item1',
        slots: [
            {
                date : ISODate("2013-01-18T23:00:00Z")
            },
            {
                date : ISODate("2013-02-05T23:00:00Z")
            },
            {
                date : ISODate("2013-03-24T23:00:00Z")
            },
        ]
    },
    {
        name: 'item2',
        slots: [
            {
                date : ISODate("2013-01-12T23:00:00Z")
            },
            {
                date : ISODate("2013-01-03T23:00:00Z")
            },
            {
                date : ISODate("2013-03-04T23:00:00Z")
            },
        ]
    },
    {
        name: 'item3',
        slots: [
            {
                date : ISODate("2013-03-14T23:00:00Z")
            },
            {
                date : ISODate("2013-02-18T23:00:00Z")
            },
            {
                date : ISODate("2013-03-07T23:00:00Z")
            },
        ]
    }
]

我需要按slots.date 升序排序的结果。所以结果应该是这样的:

[
    {
        name: 'item2',
        slots: [
            {
                date : ISODate("2013-01-03T23:00:00Z")
            },
            {
                date : ISODate("2013-01-12T23:00:00Z")
            },              
            {
                date : ISODate("2013-03-04T23:00:00Z")
            },
        ]
    },
    {
        name: 'item1',
        slots: [
            {
                date : ISODate("2013-01-18T23:00:00Z")
            },
            {
                date : ISODate("2013-02-05T23:00:00Z")
            },
            {
                date : ISODate("2013-03-24T23:00:00Z")
            },
        ]
    },      
    {
        name: 'item3',
        slots: [
            {
                date : ISODate("2013-02-18T23:00:00Z")
            },
            {
                date : ISODate("2013-03-07T23:00:00Z")
            },
            {
                date : ISODate("2013-03-14T23:00:00Z")
            }
        ]
    }
]

第一个 item2,因为它包含最早的 slot.date (ISODate("2013-01-03T23:00:00Z"))。第二项1,因为它包含第二个最早的日期(ISODate("2013-01-18T23:00:00Z")) 等等......它也可以对嵌入文档中的日期进行排序?

我尝试过的:

.sort({{slots.date : 1}})

但我得到一个语法错误。我使用 MongoVUE 测试查询,MongoVUE 可能无法在嵌入式文档上运行排序?这甚至可能是我想做的事?

【问题讨论】:

    标签: mongodb sorting mongovue


    【解决方案1】:

    你展示的代码:

    .sort({{slots.date : 1}})
    

    有语法错误。你的代码中有两个括号,应该是:

    .sort({slots.date : 1})
    

    还有几种方法可以对您的内部子文档进行排序。也许客户端是这里最快的方法,但是如果它证明在 MongoDB 本身内本地执行它更快,您也可以使用聚合框架:

    db.col.aggregate([
        {$unwind: '$slots'},
        {$sort: {slots.date:1}},
        {$group: {_id: '$_id', slots: {$push: '$slots'}}
    ])
    

    类似的东西会对子文档进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2012-02-11
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多