c# - 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 查询附加在一起并将它们全部发送到数据库以同时运行的东西,但是,我还没有找到任何这样的功能。
预先感谢您的任何帮助!
解决方案
服务器中没有 API 可以在一个命令中发出多个查找查询。
如果您希望减少查询延迟,我建议将应用程序移到更靠近数据库的位置(或添加另一个更靠近数据库的应用程序,以聚合查询结果)。
推荐阅读
- python - 默认 Adam 优化器在 tf.keras 中不起作用,但字符串 `adam` 可以
- java - 错误:类扩展 HttpServlet 时无法找到或加载主类
- silverlight - 调试资源字符串不可用。通常,关键和论点提供了足够的信息来诊断问题
- c# - 覆盖控制器的授权角色
- generics - 仅实现对实现特征的类型子集的支持
- python - Docker - 无法运行 AWS S3 命令
- function - 在 powershell 命令窗口中写入函数的输出
- java - 关于从 java 中的 ZipInputStream/ZipEntry 读取的问题
- r - 条形图未显示 x 轴标题和 y 轴数字
- express - Express 会自动处理带有状态码值的错误吗?