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

时间:2015-08-06 05:02:53

标签: mongodb mongodb-query aggregation-framework

我有一个这样的架构:

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,我想在可能的情况下在一个查询中执行此操作

1 个答案:

答案 0 :(得分:2)

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

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

获取最大值($max)&#34;已创建&#34;每个&#34;所有者的价值&#34;你要求使用$in,它采用一系列值来匹配条件中的字段。

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

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从每个分组边界获取第一个值(降序在sort中完成)。