MongoDB ::获取10条不同的" Person"

时间:2015-02-18 01:02:15

标签: c# mongodb

我在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个唯一密钥的最新记录?

1 个答案:

答案 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所以我的语法可能会有所不同。