在我们的Mongo数据库中,我们有一个由" StoreId"索引的集合。和" ItemId"。以下查询返回" In"中包含的所有产品商店组合(共9个文档)。名单。
var productQuery = Query.In("ItemId", new BsonArray(new List<int> {1, 2, 3}));
var storeQuery = Query.In("StoreId", new BsonArray(new List<int> {1, 2, 3}));
var queryToBringNineDocuments = Query.And(productQuery, storeQuery);
如何编写一个查询,在以下项目存储元组列表中将带有键的文档带回来?
var neededProductStores = new List<Tuple<int, int>>
{
new Tuple<int, int>(1, 2),
new Tuple<int, int>(1, 3),
new Tuple<int, int>(2, 1),
new Tuple<int, int>(3, 2)
};
var queryToBringFourDocuments = ?;
答案 0 :(得分:4)
在我看来,目前只有一种方法 - 创建包含id和查询的额外字段
因此,在您存储到数据库的c#类中,您可以拥有:
public string ProductStoreId
{
get
{
return string.Format("{0}_{1}",ItemId, StoreId);
}
set { } //empty set means that it will be stored to database
}
然后您的查询将是:
var query = Query.In("ProductStoreId", new BsonArray(new List<string> {"1_2", "1_3",.. }));
答案 1 :(得分:1)
这也可以通过累积AND查询的OR查询来完成。如果你有很多组合,它可能会变得非常难看。
var neededProductStores = new List<Tuple<int, int>>
{
new Tuple<int, int>(1, 2),
new Tuple<int, int>(1, 3),
new Tuple<int, int>(2, 1),
new Tuple<int, int>(3, 2)
};
IMongoQuery[] queries =(from t in neededProductStores
select Query.And(Query.EQ("ItemId", t.Item1), Query.EQ("StoreId", t.Item2))).ToArray<IMongoQuery>();
var queryToBringFourDocuments = Query.Or(queries);