我在mongodb
中有一个大型数据库,我想获得10个distinct
数据文档,不会重复特定字段的值。换句话说,它是distinct
。我该如何编写代码?
public class Person : BaseEntity
{
public Person()
{
UniqueId = GetUniqueKey(8);
}
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public DateTime DOB { get; set; }
public DateTime DOD { get; set; }
public string Father { get; set; }
public string Mother { get; set; }
public DateTime InvalidatedAt { get; set; }
public string InvalidatedBy { get; set; }
public string UniqueId { get; set; }
}
在person类中,每个人的唯一值是唯一的,但每次编辑人员时,旧数据都不会被替换,我们将添加一组新数据。这意味着每个人都可以拥有多条记录。 现在我想得到前十名的人,每个人只需要最新的记录。
如何获取10个唯一密钥的最新记录?
答案 0 :(得分:1)
我不确定如何在C#中执行此操作,但在mongo shell中,我认为您可以这样做(假设UniqueID
对应于_id
):
db.persons.aggregate([
{'$sort': {'_id':-1}}, //Descending sort : we want the latest insertions first
{'$group': //Grouping will remove distinct objects
{'_id':
{
'FirstName':'$FirstName',
'MiddleName':'$MiddleName',
'LastName':'$LastName',
//add more fields to make sure the Person is unique
}
}
},
{'$limit':10},
{'$project': //This step is not required but it gives a nicer output
{
'_id': 0,
'FirstName':'$_id.FirstName',
'MiddleName':'$_id.MiddleName',
'LastName':'$_id.LastName',
//and so on for other fields from your $group's _id
}
}
])
在$group
子句中,我只放了名字,中间名和姓,但是将所有字段放在_id
中的所有字段中(你知道你的数据) ,我不是!)。
我自己是MongoDB的初学者而且我无法访问Mongo所以我的语法可能会有所不同。