这可能很简单,但我很难搞清楚:
我有一个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;
答案 0 :(得分:1)
我假设您的StockDoc类为:
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()