Node.js mongoose检索每种类型的一个文档
我有一个Node.js mongoose检索每种类型的一个文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个batchIds数组,比如[001002003,…]。再想象一下,我的收藏是这样的: { batchId: 001, data: ... } { batchId: 001, data: ... } { batchId: 001, data: ... } { batchId: 002, data: ... } { batchId: 002, data: ... } { batchId: 003, data: ... } { batchId: 003, data: ... } { batch
batchId
s数组,比如[001002003,…]
。再想象一下,我的收藏是这样的:
{ 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: ... }
我浏览了一遍,建议的答案是对每个batchId
执行dofindOne
。但是,有没有任何方法可以在一个数据库获取中实现呢
注意:我现在所做的是阅读所有内容,然后使用Lodash'
..uniqBy
对每个内容进行过滤。只需要知道这是否是唯一的方法。您可以使用mongoDB聚合管道获取每种类型的第一个文档
将,$group
与$first
一起使用
首先在中使用$match
和$in
来获取与批处理ID数组
对应的所有文档
接下来,按batchId
分组,并使用$first
获取第一个文档的数据
Collection.aggregate([
$match :{
batchId : {
$in : batchIdArray
}
},
$group : {
_id : "$batchId",
batchId : { $first : "$batchId"},
data : {$first : "$data}
}
]);
有关详细信息,请阅读和上的MongoDB文档。您可以使用MongoDB聚合管道获取每种类型的第一个文档 将,
$group
与$first
一起使用
首先在中使用$match
和$in
来获取与批处理ID数组
对应的所有文档
接下来,按batchId
分组,并使用$first
获取第一个文档的数据
Collection.aggregate([
$match :{
batchId : {
$in : batchIdArray
}
},
$group : {
_id : "$batchId",
batchId : { $first : "$batchId"},
data : {$first : "$data}
}
]);
有关详细信息,请阅读和上的MongoDB文档。我会尝试一下,并让您知道@当然,我希望这会对你有用,并能达到你想要的效果。我会试试,让你知道@丹麦当然,我希望这将为你工作,并将实现你想要的结果。