mongoose检索每种类型的一个文档

时间:2018-03-19 08:22:18

标签: node.js mongodb mongoose

我有batchId个数组,比如[001, 002,003,...]。还想象我的收藏是这样的:

{ batchId: 001, data: ... }
{ batchId: 001, data: ... }
{ batchId: 001, data: ... }
{ batchId: 002, data: ... }
{ batchId: 002, data: ... }
{ batchId: 003, data: ... }
{ batchId: 003, data: ... }
{ batchId: 003, data: ... }

现在,我可以获得每个batchId的第一个文档,以便响应如下:

{ batchId: 001, data: ... }
{ batchId: 002, data: ... }
{ batchId: 003, data: ... }

我浏览了Select one of each type from collection,建议的答案为findOne batchId。但是有什么方法可以在单个数据库中获取吗?

注意:我现在所做的就是阅读所有内容,然后使用Lodash'_.uniqBy对每个进行过滤。只需要知道这是否是唯一的方法。

1 个答案:

答案 0 :(得分:2)

您可以使用mongoDB聚合管道来获取每种类型的第一个文档。

使用$group$first

首先使用$match$in来获取与batchIds数组相对应的所有文档。

接下来,按batchId分组,并使用$first获取第一个文档的数据。

Collection.aggregate([
    $match :{
        batchId : {
            $in : batchIdArray
        }
    },
    $group : {
        _id : "$batchId",
        batchId : { $first : "$batchId"},
        data : {$first : "$data}
    }
]);

阅读$group$match上的MongoDB文档,了解详细信息。