返回文档,其中数组元素包含输入数组的所有值 | MongoDB

Posted

技术标签:

【中文标题】返回文档,其中数组元素包含输入数组的所有值 | MongoDB【英文标题】:Return document where array element includes all values of input array | MongoDB 【发布时间】:2021-10-02 01:25:25 【问题描述】:

我有一个练习集:

[
    
        "name": "Push Ups",
        "muscleGroups": ["Chest", "Shoulders", "Abs", "Biceps"]
    ,
    
        "name": "Sit Ups",
        "muscleGroups": ["Abs"]
    ,
    
        "name": "Pull Ups",
        "muscleGroups": ["Abs", "Biceps", "Back"]
    
]

inputMuscleGroups 的输入数组。我正在尝试将练习过滤到文档的muscleGroups 数组包含inputMuscleGroups 的每个元素的位置。

对于inputMuscleGroups = ["Abs"],每个文档都会返回。

对于inputMuscleGroups = ["Abs", "Biceps"],输出为:

[
    
        "name": "Push Ups",
        "muscleGroups": ["Chest", "Shoulders", "Abs", "Biceps"]
    ,
    
        "name": "Pull Ups",
        "muscleGroups": ["Abs", "Biceps", "Back"]
    
]

对于inputMuscleGroups = ["Abs", "Shoulders", "Chest"],输出为:

[
    
        "name": "Push Ups",
        "muscleGroups": ["Chest", "Shoulders", "Abs", "Biceps"]
    
]

我玩过$in,但似乎只有在任何输入数组与任何文档数组匹配时才会返回 true。

理想情况下,我希望在 .find() 方法中执行此操作,而不是在 .aggregate() 方法中。

【问题讨论】:

【参考方案1】:

您可以简单地使用$all

db.collection.find(
  muscleGroups: 
    $all: [
      "Abs",
      "Biceps"
    ]
  
)

工作Mongo playground

【讨论】:

谢谢!完美的。如果它嵌套在一个对象中呢?我似乎无法让它工作:Mongo Playground 在这种情况下,您需要使用聚合

以上是关于返回文档,其中数组元素包含输入数组的所有值 | MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

仅返回嵌套数组中匹配的子文档元素

求最值背景下动态删除线段树节点

LeetCode-数组寻找峰值

理解数组行为的算法[重复]

Leetcode练习(Python):数组类:第54题:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

寻找峰值