【问题标题】:Return document where array element includes all values of input array | MongoDB返回文档,其中数组元素包含输入数组的所有值 | 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() 方法中。

【问题讨论】:

    标签: arrays mongodb mongoose mongodb-query


    【解决方案1】:

    您可以简单地使用$all

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

    工作Mongo playground

    【讨论】:

    • 谢谢!完美的。如果它嵌套在一个对象中呢?我似乎无法让它工作:Mongo Playground
    • 在这种情况下,您需要使用聚合
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多