首页 > 解决方案 > MongoDB c#驱动程序 - 同时提交多个不同的查找查询

问题描述

我需要能够通过单个连接向我的 MongoDB 提交多个 FIND 查询。与 BulkWrite 方法类似的功能,但我需要 BulkFind 之类的东西。我知道 Find 方法的工作方式类似,但是,它有一个不同之处在于它不会将多个查询附加在一起,它只是运行带有一组过滤器的单个查询。

目前,我的问题有两个无效的解决方案。第一个使用 Find 方法:

FilterDefinition<ItemBase> allFilters;
List<FilterDefinition<ItemBase>> combineFilter = new List<FilterDefinition<ItemBase>>();

foreach (ItemSearch item in items)
{
     var filter = Builders<ItemBase>.Filter.Where(x => x.ItemTier == item.ItemTier);
     var filter2 = Builders<ItemBase>.Filter.Where(x => x.ItemRarity.ToLower() == item.ItemRarity.ToLower());
     var filter3 = Builders<ItemBase>.Filter.Where(x => x.ItemType.ToLower() == item.ItemType.ToLower());
     var filter4 = Builders<ItemBase>.Filter.Where(x => x.ItemSlotType.ToLower() == item.ItemSlotType.ToLower());
     combineFilter.Add(Builders<ItemBase>.Filter.And(filter, filter2, filter3, filter4));
}

allFilters = Builders<ItemBase>.Filter.Or(combineFilter);

returnList = _items.Find(allFilters).ToList();

return returnList;

第二个非工作解决方案使用 Aggregate().Match() 功能:

FilterDefinition<ItemBase> allFilters;
List<FilterDefinition<ItemBase>> combineFilter = new List<FilterDefinition<ItemBase>>();

foreach (ItemSearch item in items)
{
     var filter = Builders<ItemBase>.Filter.Where(x => x.ItemTier == item.ItemTier);
     var filter2 = Builders<ItemBase>.Filter.Where(x => x.ItemRarity.ToLower() == item.ItemRarity.ToLower());
     var filter3 = Builders<ItemBase>.Filter.Where(x => x.ItemType.ToLower() == item.ItemType.ToLower());
     var filter4 = Builders<ItemBase>.Filter.Where(x => x.ItemSlotType.ToLower() == item.ItemSlotType.ToLower());
     combineFilter.Add(Builders<ItemBase>.Filter.And(filter, filter2, filter3, filter4));
}

allFilters = Builders<ItemBase>.Filter.Or(combineFilter);

returnList = _items.Aggregate().Match(combineFilter).ToList();

return returnList;

但是,这两种解决方案的问题在于它只返回结果的单个实例。我的目标是它可以多次找到同一个文档并在需要时多次返回。我正在寻找将一堆不同的 FIND 查询附加在一起并将它们全部发送到数据库以同时运行的东西,但是,我还没有找到任何这样的功能。

预先感谢您的任何帮助!

标签: c#mongodb

解决方案


服务器中没有 API 可以在一个命令中发出多个查找查询。

如果您希望减少查询延迟,我建议将应用程序移到更靠近数据库的位置(或添加另一个更靠近数据库的应用程序,以聚合查询结果)。


推荐阅读