You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Mongoose查询食材列表为给定ID子集的Recipe文档

解决方案

你原本的查询思路是正确的,只需要在$elemMatch的匹配规则里指定嵌套的ingredient字段即可,正确写法如下:

Recipe.find({
  ingredients: {
    $not: {
      $elemMatch: {
        ingredient: { $nin: ingredients }
      }
    }
  }
})

逻辑说明

  1. $elemMatch会遍历ingredients数组的每个子元素,这里的规则是匹配「子元素的ingredient字段不在给定的食材ID列表中」的项
  2. 外层的$not对匹配结果取反,最终返回的就是「不存在任何食材ID不在给定列表中」的配方,也就是所有用到的食材都属于给定列表的配方

如果需要语义更直白的写法,可以用$expr搭配$setIsSubset操作符实现完全相同的效果:

Recipe.find({
  $expr: {
    $setIsSubset: ["$ingredients.ingredient", ingredients]
  }
})

这个写法直接表达了「当前配方用到的所有食材ID集合,是给定食材ID列表的子集」的逻辑,和你的需求完全匹配。

内容的提问来源于stack exchange,提问作者feychu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:15:03