在Mongodb中,如何使用两个“对齐”的搜索参数数组来搜索文档?

时间:2018-08-27 20:36:30

标签: c# mongodb mongodb-query

假设您有一个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));
}

1 个答案:

答案 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;
}