mongoose MongoDB -查询包含特定值的对象数组

slwdgvem  于 2023-03-12  发布在  Go
关注(0)|答案(1)|浏览(184)

我正在构建一个简单的食谱应用程序,用于实践,我有一个包含所有食谱及其成分的集合:

{
        "_id": "640a5f1fa99f441f56e0996c",
        "schema": 0,
        "userId": "640a46b8b9447ba3c4832c3d",
        "name": "banana smoothie",
        "ingredients": [
            {
                "name": "banana",
                "qty": 2,
                "unit": "unit"
            },
            {
                "name": "milk",
                "qty": 1,
                "unit": "cup"
            }
        ]
    }

现在,我尝试构建一个查询,它将允许我找到用我现有的配料可以制作的所有食谱。
例如:
1.如果我只有香蕉,我就做不了香蕉冰沙(少了牛奶)
1.如果我有香蕉、牛奶和苹果,查询应返回Banana Smoothie
到目前为止,我有这样的东西:

find({'ingredients.name': {$all:['banana', 'milk']}, ingredients: {$size:2}})

这将找到所有含有香蕉和牛奶的食谱,而不是其他的,但是对于我的示例中的案例2,这将失败。
提前感谢您的帮助!

hjzp0vay

hjzp0vay1#

当使用$all时,需要数组ingredients.name包含['banana', 'milk', 'apple']的所有值,因此对于您的情况,应该使用$setIsSubset

db.collection.find({
  $expr: {
    $and: [
      {
        "$setIsSubset": [
          "$ingredients.name",
          [
            "banana",
            "milk",
            "apple"
          ]
        ]
      },
      {
        $eq: [
          {
            $size: "$ingredients"
          },
          2
        ]
      }
    ]
  }
})

Mongo Playground

相关问题