MongoDB C#驱动程序 - >检查一个字符串是否包含一个列表中的元素(字符串)

我试图实现相当简单的算法。假设我们有一些简单的层次结构: (root)A => B => C 每个nove代表一些ID,每个ID包含许多记录。MongoDB C#驱动程序 - >检查一个字符串是否包含一个列表中的元素(字符串)

记录有: (串)Id和(名单)ExcludedId

所以我们可以有:

REC 1:{ID:A; ExcludedId = [B]}

rec2:{Id:A; ExcludedId = [D]}

rec3:{Id:A; ExcludedId = [B]}

rec1':{Id:A; ExcludedId = []}

REC1" :{ID:C; ExcludedId = []}

REC2' :{ID:d; ExcludedId = []}

现在算法看起来像:

如果我想借此记录从CI需要考虑: C,B,A ID和 C,B存在,不存在ExcludedId

所以我写了:

public List<Record> GetRecords(string id, List<string> parentId) 

{

if (parentsIds == null)

parentsIds = new List<string>();

var collection = _mongoDbConnection.GetCollection<Records>();

var allScenarios = parentsIds.ToList();

allScenarios.Add(Id);

var myfilter = Builders<Record>.Filter.And(

Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.Id.Contains(s))),

Builders<Record>.Filter.Not(Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.ExcludedIds.Contains(s))))

);

return collection.Find(myfilter).ToList();

}

但是我收到一个异常,说:

Unsupported filter: Any(value(System.Collections.Generic.List`1[System.String]).Where({document}{Id}.Contains({document}))).' 

你能帮助我吗?谢谢你在前进

编辑:

更改:

Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.Id.Contains(s)) 

Builders<Record>.Filter.In(ts => ts.ScenarioGuid, parentScenarioGuids), 

这作品!但我有问题

Builders<Record>.Filter.Not(Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.ExcludedIds.Contains(s)))) 

);

因为ExcludedIds是列表。其结果是:

Builders<Record>.Filter.Nin(ts => ts.ExcludedScenarioGuids, allScenarios) 

Cannot convert lambda expression to type FieldDefinition<Records, string> because it not a delegate type. 

异常指向TS => ts.ExcludedScenarioGuids

EDIT2:

如@cloudikka写道,溶液是AnyNin和在。谢谢

回答:

您可能需要使用In方法而不是Where方法。或者,Nin方法。两者都可以用于单个值字段。对于数组字段,还有AnyInAnyNin

相关来源:

In method

Nin method

AnyIn method

AnyNin method

以上是 MongoDB C#驱动程序 - &gt;检查一个字符串是否包含一个列表中的元素(字符串) 的全部内容, 来源链接: utcz.com/qa/264427.html

回到顶部