2

我有一系列这样的对话:

    [
        {
            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'}
        }}
    ])

但是又出现了两个问题:没有消息的会话没有被选中,消息仍然不受限制。

你有什么想法,如何解决?或者如何解决其中一个问题?谢谢!

4

1 回答 1

2

将消息推送到文档数组时,可以结合使用排序和切片运算符:

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

它们分别使您的数组排序和限制。

于 2013-07-24T05:41:10.923 回答