样本数据:

db={
  "Test": [
    {
      "x": [1, 2],
      "y": [1, 2, 3]
    },
    {
      "x": [1, 2],
      "y": [2, 3, 4]
    }
  ]
}

要匹配静态数组值,我可以这样做:

db.Test.aggregate([
  {
    "$match": {
      "y": {
        "$all": [1, 2]
      }
    }
  }
])

..要获得所需的结果,其中所有值x都在y中:

[
  {
    "x": [1, 2],
    "y": [1, 2, 3]
  }
]

但是我需要找到具有数组字段值的array.try 使用$all$expr,但这是不允许的:

db.Test.aggregate([
  {
    "$match": {
      "$expr": {
        "$all": [
          "$x",
          "$y"
        ]
      }
    }
  }
])

我还能做些什么呢?谢谢.

Playground

推荐答案

假设您可以将数组视为具有唯一项的集合,则可以使用$setIsSubset运算符,例如:

db.collection.aggregate([
  {
    $match: {
      $expr: {
        "$setIsSubset": [
          "$x",
          "$y"
        ]
      }
    }
  }
]);

如果第一个数组是第二个数组的子集,则运算符返回true.对于您的示例,这将返回第一个文档,但不返回第二个文档.

看看这个mongoplayground来测试一下.

Mongodb相关问答推荐

从MongoDB中的嵌套数组中提取找到的值及其索引

为什么我的Mongoose更新找不到匹配?

Next js、MongoDB和Prisma.包括不为相关字段工作

如何获取键值对的对象,其中值仅具有 mongoDB 中的投影字段

Golang中的Mongo中值运算

Mongo $sort然后$group,顺序能保证吗?

MongoDB - 文档中多个数组大小的总和

MongoDB 查询以包含多个字段的最常见值的计数

MongoID find 或 find_by

MongoDB 的 BinData(0, "e8MEnzZoFyMmD7WSHdNrFJyEk8M=") 中的0是什么意思?

django 和 mongodb 是否使迁移成为过go ?

MongoDB 3 Java判断集合是否存在

C# mongodb driver 2.0 - 如何在批量操作中更新插入?

MongoDB - 文件大小巨大且不断增长

MongoDB 查询:字段不存在或具有特定值

Mongodb - 如何在多个字段中查找字符串?

pre save和validate之间的mongoose区别?什么时候用哪一个?

单个语句中的多个 mongo 更新运算符?

试图从 mongoose 获取Collection 列表

Mongodb Compass 无法在 Ubuntu 18.10 中打开