MongoDB排序和限制数组内部

时间:2013-07-20 04:55:29

标签: mongodb nosql

我有这样的对话集合:

    [
        {
            title: ...,
            members: [...],
            messages: [
                { _id: ..., date: ..., text: ... },
                { _id: ..., date: ..., text: ... },
                ...
            ]
        },
        {
            title: ...,
            members: [...],
            messages: []
        },
        ...
    ]

某些文档有一个空消息数组。 我需要选择几个集合(对于一个用户),但有两件事:

1) The order of messages must be reversed (or messages must be ordered by date desc, result is the same).
2) The number of messages for each conversation must be limited.

我尝试使用此查询来反转消息:

    db.conversations.aggregate([
        {$match: {members: 'someUserId'}}
        {$unwind: '$messages'},
        {$sort: {'messages.date': -1}},
        {$group: {
            _id: '$_id',
            title: {$first: '$title'},
            members: {$first: '$members'},
            messages: {$push: '$messages'}
        }}
    ])

但又有两个问题:未选择没有消息的会话且消息仍然不受限制。

你有什么想法,如何解决?或者如何解决这个问题呢? 谢谢!

1 个答案:

答案 0 :(得分:2)

当您将消息推送到文档数组中时,有一个sort和slice运算符可以结合使用:

http://docs.mongodb.org/manual/reference/operator/sort/ http://docs.mongodb.org/manual/reference/operator/slice/

它们分别对数组进行排序和限制。