使用一个查询查找多个文档



我有一个这样的模式:

schema
{
    owner: <id to other document type>
    created: date
}

我有一个所有者id数组:[owner_id_1,owner_id_2,…owner_id_x]

我想和这些所有者一起获得一份文件列表,但仅限于每个文件的最新版本。单独进行查询:

find_one({ owner: owner_id_1 }).sort({ created: -1 }).limit(1)

但我不想触发其中的x个,如果可能的话,我想用一种方法在一个查询中完成

.aggregate()方法允许您执行此操作,同时通过$in运算符匹配文档:

collection.aggregate([
    { "$match": { "owner": { "$in": [owner_id_1, owner_id_2, ... owner_id_x] } },
    { "$group": {
        "_id": "$owner",
        "created": { "$max": "$created" }
    }}
])

获取您使用$in要求的每个"所有者"的最大($max("创建"值,该值采用一组值来匹配条件中的字段。

如果您想要比这一个字段更多的数据,请在$group之前使用$sort

collection.aggregate([
    { "$match": { "owner": { "$in": [owner_id_1, owner_id_2, ... owner_id_x] } },
    { "$sort": { "owner": 1, "created": -1 } },
    { "$group": {
        "_id": "$owner",
        "created": { "$first": "$created" },
        "docId": { "$first": "$_id" },
        "something": { "$first": "$something" }
    }}
])

$first从每个分组边界取第一个值(按排序递减(。

相关内容

  • 没有找到相关文章

最新更新