mongodb:命令和限制集合,然后命令和限制生成的文档嵌套文档

时间:2015-04-19 01:32:51

标签: mongodb pymongo aggregation-framework

我的game集合中有以下数据结构:

{
    name: game1
    date: 2010-10-10
    media: [{
        id: 1,
        created: 2010-10-10 00:00:59
    }, {
        id: 2,
        created: 2010-10-10 00:00:30
    }]
},
{
    name: game2
    date: 2010-10-09
    media: [{
        id: 1,
        created: 2010-10-09 00:10:40
    }, {
        id: 2,
        created: 2010-10-09 09:01:00
    }]
}

我希望获得具有最高日期的game,然后获取具有最高media的相关created以获取其ID。在上面的示例中,结果将是

{
    name: game1
    date: 2010-10-10
    media: [{
        id: 1,
        created: 2010-10-10 00:00:59
    }]
}

我尝试使用findfind_one以及aggregation,但我无法想出办法进行此查询。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您需要$unwind media数组才能获取created最高的数组中的子文档,然后date $sort您的文档created所有都按降序排列。}和n使用$limit输出1文件In [26]: import pymongo In [27]: conn = pymongo.MongoClient() In [28]: db = conn.test In [29]: col = db.gamers In [30]: list(col.aggregate([{"$unwind": "$media"}, {"$sort": {"date": -1, "media.created": -1}}, {"$limit": 1}])) Out[30]: [{'_id': ObjectId('553323ec0acf450bc6b7438c'), 'date': '2010-10-10', 'media': {'created': '2010-10-10 00:00:59', 'id': 1}, 'name': 'game1' }]

{{1}}