如何检查一个数组是否包含完全独立于MongoDB顺序的特定项?

eit6fx6z  于 2023-01-04  发布在  Go
关注(0)|答案(1)|浏览(100)

每个文档都有一个用户数组。如果一个文档的用户数组中有值-〉['123','456']['456','123'],我想在数据库中检查,顺序无关紧要,但我需要这些且仅这些值出现在用户数组中。
我基本上是在寻找类似set(users.array) == set(456, 123)的东西
我尝试使用$in运算符,但它不能正常工作,因为如果只有其中一个存在,它会给出“true”,而$all(如我所见)不会检查这些值是否是唯一存在的值。

yi0zb3m4

yi0zb3m41#

您将需要测试2项内容:

  • 数组包含所有需要的元素
  • 数组不包含任何不需要的元素

$all查询运算符处理第一个测试。{$all: ["123","456"]}
对于第二个测试,您可以使用then $nin操作符{$nin: ["123","456"]}。因为它一次测试整个数组,所以它本身只匹配不包含所需值的文档。
使用$elemMatch运算符对每个元素分别应用$nin测试可以匹配不需要的文档。{$elemMatch:{$nin: ["123","456"}}
使用$not反转$eleMatch以消除不需要的文档。
把这些放在一起:

{$and: [
    {key: {$all: ["123","456"]}},
    {key: {$not: {$elemMatch: {$nin: {"123","456"}}}}}
]}

Playground

相关问题