假设您有一个mongo文档,其中的复合键由两个字段组成: doc_id 和 sec_id
在我的业务逻辑中,它们连接起来创建一个“ id”,其中:
id = doc_id-sec_id。
我的查询包含以下两个数组:
doc_ids = [1,2,3] sec_ids = [111,222,333]
它们对应于ID为1-111,2-222、3-333的文档。
我想将这两个数组传递给mongo搜索查询,以便搜索将仅返回id =“ doc_ids [i] -sec_ids [i]”匹配的文档。
例如,我想要上面列出的三个文档。我不希望ID为1-222或3-111等的文档。
这是我使用Mongo的C#过滤器生成器尝试此查询的方法。这是实现我的目标的明智选择吗? (特别是“ In”的使用)
GetDocumentIdsFilter(IEnumerable<string> doc_ids, IEnumerable<string> sec_ids )
{
var filterBuilder = Builders<ViewedContent>.Filter;
return filterBuilder.And(
filterBuilder.In(x => x.doc_id, doc_ids),
filterBuilder.In(x => x.sec_id, sec_ids));
}
答案 0 :(得分:0)
这是应该工作的C#版本:
private static FilterDefinition<ViewedContent> GetDocumentIdsFilter(IEnumerable<string> doc_ids, IEnumerable<string> sec_ids)
{
var filterBuilder = Builders<ViewedContent>.Filter;
var query = filterBuilder.Or(doc_ids.Zip(sec_ids, (docId, secId) => filterBuilder.And(
filterBuilder.Eq(x => x.doc_id, docId),
filterBuilder.Eq(x => x.sec_id, secId))));
// add another independent filter as per your comment above
query = filterBuilder.And(query, filterBuilder.Eq(x => x.user_id, "some id"));
return query;
}