Mongodb Mongo按不同字段筛选结果
我将此ruby驱动程序用于mongo: 我收集了很多这样的文档:Mongodb Mongo按不同字段筛选结果,mongodb,Mongodb,我将此ruby驱动程序用于mongo: 我收集了很多这样的文档: { "_productId" => 10 .... } { "_productId" => 10 .... } { "_productId" => 12 .... } 获取具有不同“\u productId”的所有文档的请求是什么?我的意思是,我想获取此示例中的第一个和最后一个集合项。@db['collection'].distinct('u productId')) 由于从组中选择文
{
"_productId" => 10
....
}
{
"_productId" => 10
....
}
{
"_productId" => 12
....
}
获取具有不同“\u productId”的所有文档的请求是什么?我的意思是,我想获取此示例中的第一个和最后一个集合项。@db['collection'].distinct('u productId'))
由于从组中选择文档的基础未知,并且假设要选择的每个
productid
的第一个文档都基于它们的插入顺序,因此您可以一起使用聚合$group
,$project
操作符
根据所有记录的productId
对其进行分组,从每组中选择第一个
文档
db.collection.aggregate([
{$group:{"_id":"$_productId","distinct_doc":{$first:"$$ROOT"}}},
{$project:{"distinct_doc":1,"_id":0}}
])
如果每个文档都有一个_id字段,则第一个文档将是为该特定组首先插入的文档。如果选择基于其他字段执行此操作,则需要在对记录进行分组之前执行额外的$sort
操作
比如说,
db.collection.aggregate([
{$sort:{"someField":1}},
{$group:{"_id":"$_productId","distinct_doc":{$first:"$$ROOT"}}},
{$project:{"distinct_doc":1,"_id":0}}
])
在这种情况下,每组的第一个文档将是排序时位于顶部的文档。您查看了吗?您在什么基础上选择第一项而不是第二项?