我正在尝试在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(值(System.Int32 []))。
ExternalKeys属性声明为Hashset<int>
我使用的是MongoDB 3.4和C#Driver 2.4.4,AFAIK是最新版本。
答案 0 :(得分:1)
你真的希望$in
在这里&#34;&#34; [40, 30, 20]
中的至少一个在目标数组中匹配。这是通过AnyIn()
myCollection.Find(
Builders<BsonDocument>.Filter.AnyIn( x => x.ExternalKeys, new[] { 40, 30, 20 } )
).ToList();
$in
不仅适用于数组,而且本质上是可以匹配属性的可能值列表。只是MongoDB将数组视为匹配&#34;它的任何值&#34;同样。
因此,实际上你正在寻找的是你所谓的&#34;子集&#34;,因为目标是&#34;子集&#34;将它与任何元素相交的地方进行比较。