我有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
对每个进行过滤。只需要知道这是否是唯一的方法。
答案 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}
}
]);