const mongoose = require("mongoose");
const { ObjectId } = mongoose.Schema;

const productSchema = new mongoose.Schema(
  {
    title: {
      type: String,
      trim: true,
      required: true,
      maxlength: 32,
      text: true,
    }, 
  
    category: {
      type: ObjectId,
      ref: "Category",
    },

)

我正在try 根据类别名称过滤产品,但目录本身是一个不同的集合.由于当前筛选条件不起作用,我如何正确应用筛选条件.

 const products = await Product.find({ title:title, "category.name": categ})
const categorySchema = new mongoose.Schema(
  {
    name: {
      type: String,
      trim: true,
      required: "Name is required",
      minlength: [2, "Too short"],
      maxlength: [32, "Too long"],
    },
    
  { timestamps: true }
);

推荐答案

要访问category.name,您需要使用populate方法.但是,由于您使用的是引用的文档,这对于您的架构来说是一个非常好的设计,不幸的是,这意味着您不能根据docs中引用的子文档的条件来筛选父文档

一般而言,无法使Popate()根据故事作者的属性过滤故事.例如,即使填充了Author,下面的查询也不会返回任何结果.如果你想按作者的名字过滤故事,你应该使用非正规化.

谢天谢地,你可以用aggregate()来得到你需要的东西.

Mongoose Model.aggregate方法允许您通过MongoDB aggregation流水线阶段.在您的 case 中,可以使用引用的Category个文档填充所有Product个文档.然后,一旦它们被嵌入,你就可以像这样匹配category.name:

const products = await Product.aggregate([
  {
    $match: { //< Find the products that match your title search
      "title": title 
    }
  },
  {
    $lookup: {  //< Now populate the categories
      from: "categories", 
      localField: "category",
      foreignField: "_id",
      as: "category"
    }
  },
  {
    $match: { //< Only return matches on the category.name
      "category.name": categ
    }
  }
]);

关于用户从name:'Mens'中的Category中搜索Product title:'Hat'的工作示例,请参见HERE.

Javascript相关问答推荐

为什么我会获取MUI Date TimePicker TypHelp:Value.isValid不是AdapterDayjs.isValid中的函数

JavaScript代理不适用于打开的窗口对象

错误:(0,react__WEBPACK_IMPORTED_MODULE_1__.useSYS State)不是函数或其返回值不可迭代

nPM审计始终发现0个漏洞

使用JavaScript重命名对象数组中的键

调用SEARCH函数后,程序不会结束

为什么我达到了时间限制!?LeetCode链接列表循环(已解决,但需要解释!)

如何为GrapesJS模板编辑器创建自定义撤销/重复按钮?

Chart.js V4切换图表中的每个条,同时每个条下有不同的标签.怎么做?

我可以从React中的出口从主布局调用一个处理程序函数吗?

colored颜色 检测JS,平均图像 colored颜色 检测JS

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

为什么useState触发具有相同值的呈现

提交链接到AJAX数据结果的表单

有条件重定向到移动子域

为什么我的自定义元素没有被垃圾回收?

无法避免UV:flat的插值:非法使用保留字"

OnClick更改Json数组JSX中的图像源

未找到用于 Select 器的元素:in( puppeteer 师错误)