mongodb c#适配器2.2查询 - 滤波器条件和有限的列的前10个排序结果



以下是MongoDB中的BSON数据格式。该集合中有300000个文档。

{ 
    "_id" : "90D6F6B3-B4ED-4665-B3E2-09733F340367", 
    "RootID" : "B607F413-E248-430A-910A-304711BA4BD9", 
    "SubRootId" : "C67F493E-82CB-474B-A3B8-B8769E0878E9", 
    "SubRootVersion" : NumberInt(1), 
    "Orders" : [
        NumberInt(247), 
        NumberInt(205), 
        NumberInt(279), 
        NumberInt(272), 
        NumberInt(256), 
        NumberInt(236), 
        NumberInt(222), 
        NumberInt(250), 
        NumberInt(287), 
        NumberInt(261), 
        NumberInt(281)
    ], 
    "SubRootUpdatedDate" : ISODate("2016-06-20T17:15:14.595+0000"), 
    "UniqueNumber" : NumberLong(15410)
}
{ 
    "_id" : "09ECF9DE-B26F-49FD-B6BD-61B3A2FF4EF4", 
    "RootID" : "B607F413-E248-430A-910A-304711BA4BD9", 
    "SubRootId" : "C67F493E-82CB-474B-A3B8-B8769E0878E9", 
    "SubRootVersion" : NumberInt(1), 
    "Orders" : [
        NumberInt(247), 
        NumberInt(205), 
        NumberInt(279), 
        NumberInt(272), 
        NumberInt(256), 
        NumberInt(236), 
        NumberInt(222), 
        NumberInt(250), 
        NumberInt(287), 
        NumberInt(261), 
        NumberInt(281)
    ], 
    "SubRootUpdatedDate" : ISODate("2016-06-20T17:15:14.609+0000"), 
    "UniqueNumber" : NumberLong(15411)
}
{ 
    "_id" : "038DEB63-196D-4168-9BA8-FA011E14CD09", 
    "RootID" : "919C747A-A024-4615-AFD3-67F86BBD5360", 
    "SubRootId" : "DAEB7FE6-C4BC-4E75-B9AE-AFC1B9999F13", 
    "SubRootVersion" : NumberInt(2), 
    "Orders" : [
        NumberInt(211), 
        NumberInt(203), 
        NumberInt(231), 
        NumberInt(260), 
        NumberInt(213), 
        NumberInt(203), 
        NumberInt(200), 
        NumberInt(213), 
        NumberInt(200), 
        NumberInt(233), 
        NumberInt(220), 
        NumberInt(230), 
        NumberInt(297), 
        NumberInt(256)
    ], 
    "SubRootUpdatedDate" : ISODate("2016-06-20T17:15:09.312+0000"), 
    "UniqueNumber" : NumberLong(15116)
}
{ 
    "_id" : "BFCAC497-7206-4EBD-B2E9-F521A90536A5", 
    "RootID" : "919C747A-A024-4615-AFD3-67F86BBD5360", 
    "SubRootId" : "DAEB7FE6-C4BC-4E75-B9AE-AFC1B9999F13", 
    "SubRootVersion" : NumberInt(2), 
    "Orders" : [
        NumberInt(211), 
        NumberInt(203), 
        NumberInt(231), 
        NumberInt(260), 
        NumberInt(213), 
        NumberInt(203), 
        NumberInt(200), 
        NumberInt(213), 
        NumberInt(200), 
        NumberInt(233), 
        NumberInt(220), 
        NumberInt(230), 
        NumberInt(297), 
        NumberInt(256)
    ], 
    "SubRootUpdatedDate" : ISODate("2016-06-20T17:15:09.347+0000"), 
    "UniqueNumber" : NumberLong(15117)
}

只有序列素和fileingID是唯一的。

我正在使用最新的C#2.2驱动程序来查询以下条件。

1)最新10个最新的rootid记录(最新基于suprootupdateddate)2)记录符合订单列表的记录3)在次级日期日期范围

之间

这就是我尝试的

    var collection = _database.GetCollection<SubRoot>("SubRoots");
    var sort = Builders<SubRoot>.Sort.Descending(x => x.UniqueNumber);
    var sortByDate = Builders<SubRoot>.Sort.Descending(x => x.SubRootUpdatedDate);
    var filter = Builders<SubRoot>.Filter.In("Orders", new list<int> { 255, 256 , 299, 281});
    filter &= Builders<SubRoot>.Filter.Gt(y => y.SubRootUpdatedDate, minDate);
    filter &= Builders<SubRoot>.Filter.Lt(y => y.SubRootUpdatedDate, maxDate);
    var projection = Builders<SubRoot>.Projection
        .Exclude(x => x.SubRootUpdatedDate)
        .Exclude(x => x.SubRootId)
        .Exclude(x => x.UniqueNumber) 
        .Exclude(x => x._id)
        .Exclude(x => x.Orders)
        .Exclude(x => x.SubRootVersion);
    return collection.Find(filter).Sort(sort).Sort(sortByDate).Project(projection).ToList();

使用过滤器和排序后,我无法做一个明显的事情。另外,在做tolist()之前,我无法将结果限制为10。我希望在MongoDB中进行所有过滤,分类和限制数据。我只想将10个ID匹配的搜索标准恢复。我花了足够的时间在上面,我会很感激任何建议。

我自己找到了答案。

    var aggregate = collection.Aggregate()
        .Match(Builders<Filing>.Filter.In("Orders", ordersList))
        .Match(x => x.UniqueNumber>= UniqueNumberList)
        .Match(Builders<Filing>.Filter.Gt(y => y.SubRootUpdatedDate, minDate))
        .Match(Builders<Filing>.Filter.Lt(y => y.SubRootUpdatedDate, maxDate))
        .Sort(Builders<Filing>.Sort.Descending(x => x.UniqueNumber))
        .Sort(Builders<Filing>.Sort.Descending(x => x.SubRootUpdatedDate))
        .Group(z => z.RootID, h => new { h.Key })
        .Limit(limitValue)
        .ToList();

最新更新