MongoDb Driver 2.0 C# 过滤和聚合
MongoDb Driver 2.0 C# Filter and Aggregate
我正在研究 mongodb 2.0 的新驱动程序,并希望添加一些分面搜索(临时移动,在使用弹性搜索之前)。
这是我创建的用于构建聚合的一些方法。我想它应该可以工作。
作为参数,我还在方法中传递了一个过滤器定义。
但是我找不到如何将我的聚合限制在过滤器中。
有什么想法吗???
private void UpdateFacets(SearchResponse response, FilterDefinition<MediaItem> filter, ObjectId dataTableId)
{
response.FacetGroups =new List<SearchFacetGroup>();
SearchFacetGroup group = new SearchFacetGroup()
{
Code = "CAMERAMODEL",
Display = "Camera model",
IsOptional = false
};
using (IDataAccessor da = NodeManager.Instance.GetDataAccessor(dataTableId))
{
var collection = da.GetCollection<MediaItem>();
var list = collection.Aggregate()
.Group(x => ((ImageMetaData) x.MetaData).Exif.CameraModel, g => new { Model = g.Key, Count = g.Count() })
.ToListAsync().Result;
foreach (var l in list)
{
group.Facets.Add(new SearchFacetContainer()
{
Code = l.Model,
Display = l.Model,
Hits = l.Count,
IsSelected = false
});
}
}
response.FacetGroups.Add(group);
}
我没有使用过 facet,但是 Mongo 驱动程序聚合具有接受过滤器定义的 .Match 操作。
collection1.Aggregate().Match(filter)
我正在研究 mongodb 2.0 的新驱动程序,并希望添加一些分面搜索(临时移动,在使用弹性搜索之前)。
这是我创建的用于构建聚合的一些方法。我想它应该可以工作。
作为参数,我还在方法中传递了一个过滤器定义。 但是我找不到如何将我的聚合限制在过滤器中。
有什么想法吗???
private void UpdateFacets(SearchResponse response, FilterDefinition<MediaItem> filter, ObjectId dataTableId)
{
response.FacetGroups =new List<SearchFacetGroup>();
SearchFacetGroup group = new SearchFacetGroup()
{
Code = "CAMERAMODEL",
Display = "Camera model",
IsOptional = false
};
using (IDataAccessor da = NodeManager.Instance.GetDataAccessor(dataTableId))
{
var collection = da.GetCollection<MediaItem>();
var list = collection.Aggregate()
.Group(x => ((ImageMetaData) x.MetaData).Exif.CameraModel, g => new { Model = g.Key, Count = g.Count() })
.ToListAsync().Result;
foreach (var l in list)
{
group.Facets.Add(new SearchFacetContainer()
{
Code = l.Model,
Display = l.Model,
Hits = l.Count,
IsSelected = false
});
}
}
response.FacetGroups.Add(group);
}
我没有使用过 facet,但是 Mongo 驱动程序聚合具有接受过滤器定义的 .Match 操作。
collection1.Aggregate().Match(filter)