查询一个字段等于另一个数组字段?

用户名

假设这样的集合:

{
   movie : 1,
   List : [ 1 , 2 ,5 , 6 ]
},
{
   movie : 2,
   List : [ 3, 5, 7 ]
},
{
   movie : 3,
   List : [ 1, 3, 6 ]
}

我想获取“列表”中存在“电影”的所有文档。

如何编写查询或汇总?

尼尔·伦恩

这样做的理想形式是使用本地运营商.aggregate()$redact

db.collection.aggregate([
  { "$redact": {
    "$cond": {
      "if": {
        "$setIsSubset": [
          { "$map": { "input": ["A"], "as": "el", "in": "$movie" } },
          "$List"
        ]
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }}
])

或者,如果您$redact的MongoDB版本中没有可用版本,请改用$where查询条件:

db.collection.find(function() {
  return this.List.indexOf(this.movie) != 1
})

两者都有寻找文档中数组字段中存在的一个字段的值的基本方法。

您可以使用多种不同的形式$redact,例如$anyElementTrue

db.collection.aggregate([
  { "$redact": {
    "$cond": {
      "if": {
        "$anyElementTrue": {
          "$map": {
            "input": "$List",
            "as": "el",
            "in": { "$eq": [ "$$el", "$movie" ] }
          }
        }
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }}
])

以及MongoDB 3.2中原始语言的较短语法:

db.collection.aggregate([
  { "$redact": {
    "$cond": {
      "if": {
        "$setIsSubset": [
          ["$movie"],
          "$List"
        ]
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }}
])

$map原始用法一样,["$movie"]使单个元素成为您使用进行比较的数组/集合$setIsSubset在后一种情况下,$map仅仅是施加条件到所述阵列的每个元件返回的数组true/false的值,然后将其降低到逻辑单true/false通过$anyElementTrue

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Elasticsearch中查询一个字段不等于另一个字段

使用布尔值注释查询集,其中一个字段等于或不等于另一个字段

Laravel Eloquent:选择一个字段等于另一个字段的记录

java在实例化时设置对象字段等于另一个字段

如何查询一个字段大于另一个字段x天的记录?

Mongodb在一个字段上查询取决于另一个字段

根据另一个字段更新一个字段

需要一个字段或另一个字段

一个字段基于另一个字段的求和

在一个结构中,使用一个数组字段访问另一个字段合法吗?

Mongodb 比较使用一个字段与对象数组中的另一个字段

将1个字段复杂地移动到另一个数据库中的一个字段所需的mysql查询

SQL选择一个字段等于另一个字段,但中间有一个附加字符的地方

PHP foreach两个数组,在一个数组中找到一个值,在另一个数组中使用另一个字段(添加到数组)

SSRS取另一个字段的平均IF值等于

如何在查询中添加基于另一个字段的字段

mongoose - 查询存在于另一个字段中的字段

同一个表的所有记录由一个字段关联但由另一个字段查询 - sqlserver

SQL查询以获取一个字段为另一个特定字段重复的次数

如何将一个数组字段的长度添加到Mongodb文档中的另一个字段中

按另一个字段分组的聚合查询中两个 int 数组的总和

如何在访问中将表中的一个字段设置为等于表中的另一个字段

选择一个字段的值,其中另一个字段等于rails中的值

用另一个表字段丰富一个字段的信息

如何从查询中的一个字段获取信息以在另一个查询中使用?

将数组映射到JavaScript对象以获取另一个字段的数组

MongoDB:如何为集合中的每个文档设置一个新字段,该字段等于另一个字段的值

选择子查询结果的计数以及另一个字段

是否可以在GraphQL查询的最终响应中添加另一个字段?