【发布时间】:2018-05-01 01:55:28
【问题描述】:
我正在尝试在 MongoDB 中使用 $setIsSubset 运算符。
Documentation 说我应该写这个:
var values = Enumerable.Range(0, 10).ToArray();
var result = myCollection.Find(x => x.ExternalKeys.IsSubsetOf(values)).ToList();
但是,我遇到了以下异常:
“System.ArgumentException”类型的未处理异常发生在 MongoDB.Driver.dll
附加信息:不支持的过滤器: {myCollection}{ExternalKeys}.IsSubsetOf(value(System.Int32[]))。
ExternalKeys 属性声明为Hashset<int>
我正在使用 MongoDB 3.4 和 C# Driver 2.4.4,AFAIK 是最新版本。
【问题讨论】:
-
$setIsSubset是一个“聚合”运算符。在 MongoDB 3.6 提供$expr之前,您还不能在.Find()中使用它。你想在这里使用Aggregate(),并使用$redact -
但实际上,如果您只是询问“所有这些值都存在于此数组字段中”,那么您真正想要的是
$all。因此,除了您找错地方外,您的要求并不清楚。 -
我想过滤掉
mycollection并只获取ExternalKeys中至少有一个整数与values变量项匹配的文档 例如:values = [40, 30, 20] ExternalKeys = [10, 20] //OK ExternalKeys = [500, 600] //not OK