以下是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)
}
只有sequencenumber和filingid是唯一的。
我使用最新的c#2.2驱动程序来查询以下条件。
1)前10个最新RootId记录(最新基于SubRootUpdatedDate) 2)匹配订单列表的记录 3)SubRootUpdatedDate日期范围
之间这就是我试过的
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。我已经花了足够的时间,我很感激任何建议。
答案 0 :(得分:1)
我自己找到了答案。
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();