如何使用C#驱动程序在MongoDB上执行$ setIsSubset?

时间:2017-11-17 10:09:08

标签: c# mongodb filter set

我正在尝试在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是最新版本。

1 个答案:

答案 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;将它与任何元素相交的地方进行比较。