Mongodb Mongo按不同字段筛选结果

Mongodb Mongo按不同字段筛选结果,mongodb,Mongodb,我将此ruby驱动程序用于mongo: 我收集了很多这样的文档: { "_productId" => 10 .... } { "_productId" => 10 .... } { "_productId" => 12 .... } 获取具有不同“\u productId”的所有文档的请求是什么?我的意思是,我想获取此示例中的第一个和最后一个集合项。@db['collection'].distinct('u productId')) 由于从组中选择文

我将此ruby驱动程序用于mongo:

我收集了很多这样的文档:

{
  "_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}}
])

在这种情况下,每组的第一个文档将是排序时位于顶部的文档。

您查看了吗?您在什么基础上选择第一项而不是第二项?