【问题标题】:MongoDB :: Get 10 records for distinct "Person"MongoDB :: 为不同的“人”获取 10 条记录
【发布时间】:2015-02-18 10:29:49
【问题描述】:

我在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 名,其中每个人我只想要最新记录。

如何获取 10 个唯一键的最新记录?

【问题讨论】:

  • 如何确定最新记录?每次因编辑而添加人员类时,是否有生效日期或版本?

标签: c# mongodb


【解决方案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,所以我的语法可能有点不对。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多