3

Iamは、埋め込まれたドキュメントの日付でいくつかのドキュメントを並べ替えようとしています。私のドキュメントは次のようになります。

[
    {
        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"))が含まれているためです。2番目のitem1には、2番目に早い日付(ISODate( "2013-01-18T23:00:00Z"))などが含まれているため....埋め込みドキュメントの日付を並べ替えることもできますか?

私が試したこと:

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

しかし、構文エラーが発生します。MongoVUEを使用してクエリをテストしますが、MongoVUEは埋め込みドキュメントで並べ替えを実行できませんか?それは私がやりたいことさえ可能ですか?

4

1 に答える 1

10

あなたが示したコード:

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

構文エラーがあります。コードには2つの角かっこがあり、次のようになります。

.sort({slots.date : 1})

また、内部サブドキュメントを並べ替える方法がいくつかあります。ここではクライアント側が最速の方法かもしれませんが、MongoDB自体の中でネイティブに実行する方が高速であることが証明されている場合は、集約フレームワークを使用することもできます。

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

そのようなものはサブドキュメントをソートします。

于 2013-03-27T10:00:49.977 に答える