我有一个batchId
s数组,比如说[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: ... }
现在,我可以得到每个 one 的第一个文档batchId
,以便响应是这样的:
{ batchId: 001, data: ... }
{ batchId: 002, data: ... }
{ batchId: 003, data: ... }
我从集合中选择了每种类型之一,建议的答案是findOne
为每个batchId
. 但是有什么办法可以在单个数据库获取中做到这一点吗?
注意:我现在所做的是阅读所有内容,然后使用 Lodash'_.uniqBy
过滤一个。只需要知道这是否是唯一的方法。
您可以使用 mongoDB 聚合管道来获取每种类型的第一个文档。
使用,$group
与$first
.
首先使用$match
with$in
获取数组对应的所有文档batchIds
。
接下来,按 分组batchId
并使用 获取第一个文档的数据$first
。
Collection.aggregate([
$match :{
batchId : {
$in : batchIdArray
}
},
$group : {
_id : "$batchId",
batchId : { $first : "$batchId"},
data : {$first : "$data}
}
]);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句