从 属性-combo 获取所有文档

Getting all documents from a property-combo

这可能很简单,但我很难弄清楚:

我有一个 List<Tuple<String, String>>,其中包含我需要搜索的产品列表,我想在一个请求中获取该列表中显示的所有产品的所有文档。

Item1 是产品的 SKU,但因为可能有重复的 SKU,所以我还有 Item2,其中包含它应该查找的 SupplierId。

我的挑战是使用 MongoDB C# 驱动程序构建查询,以获取数据,有人可以提供帮助吗?

我正在使用新的 2.3.0 驱动程序版本,在这个问题上没有太多现成的帮助。

这是我目前的代码:

var collection = _database.GetCollection<StockDoc>("stock");
var result = collection.Find().ToListAsync().Result;

我假设您的 StockDoc class 为:

public class StockDoc
{
    public ObjectId Id { get; set; }
    public string SKU { get; set; }
    public string SupplierId { get; set;}
}

我会编写一个帮助方法,为列表中的每个元组创建过滤器(它和过滤器:SKU = Item1 && SupplierId == Item2):

public FilterDefinition<StockDoc> BuildFilter(Tuple<String, String> p) 
{
    return Builders<StockDoc>.Filter.And(
                Builders<StockDoc>.Filter.Eq(x=>x.SKU, p.Item1),
                Builders<StockDoc>.Filter.Eq(x=>x.SupplierId, p.Item2) );
}

之后,您可以构建一个 Or 过滤器来获取列表中所有元组的项目:

var p = new List<Tuple<String, String>> { 
       Tuple.Create("a", "1"), 
       Tuple.Create("b", "1"), 
       Tuple.Create("d", "2")};

var filter = Builders<StockDoc>.Filter.Or(p.Select(BuildFilter));

之后您可以使用此过滤器获取数据:

collection.Find(filter).ToList()