无法查询嵌套的猫鼬数组?

Posted

技术标签:

【中文标题】无法查询嵌套的猫鼬数组?【英文标题】:Impossible to query nested mongoose array? 【发布时间】:2021-08-08 15:53:14 【问题描述】:

我想在内部使用正则表达式和猫鼬(mongoDB)模型进行查询和数组。

我想在 Productmodel 的嵌套数组中搜索:

const productSchema = new schema(
  
    name: requiredString,
    sku: requiredUniqueNumber,
    ean: requiredUniqueNumber,
    suppliers: [ type: mongoose.Schema.Types.ObjectId, ref: SupplierModel ],
    categories: [ type: mongoose.Schema.Types.ObjectId, ref: CategoryModel ],
    mainImage: requiredString,
    images: [ type: String ],
    description: requiredString,
    stock: requiredNumber,
    price: requiredNumber,
    totalOrders: requiredNumber,
    reviews: [review],
  ,
  
    timestamps: true,
    count: true,
  
);

“供应商”数组中的模型是:

const supplierSchema = new schema(
  
    supplierName: requiredUniqueString,
    invoiceAddress: address,
    visitAddress: address,
    status: supplierStatusEnum,
    contacts: address,
    accountType: accountTypeEnum,
    logo: requiredString,
    user:  type: schema.Types.ObjectId, ref: "products" ,
  ,
  
    timestamps: true,
  
);

现在问题来了,如果我查询和populate(),我会得到所有结果。但由于某种原因,我无法在包含多个供应商的数组中搜索。这是我所拥有的:

 foundProducts = await ProductModel.find(
          $or: [
            
              name: 
                $regex: regex,
              ,
            ,
            
              "suppliers.supplierName": 
                $regex: regex,
              ,
            ,
            
              description: 
                $regex: regex,
              ,
            ,
          ],
        );

JSON 中的对象:

如果他发现供应商模型包含正则表达式,他应该返回包含该供应商的整个产品模型。

在嵌套数组中的所有项目中搜索的最佳方法是什么。

ps。我是一名来自 PostgreSQL 的初级开发人员,所以在我尝试这个 noSQL“东西”时对我很赤裸裸:)

【问题讨论】:

【参考方案1】:

我做错了查询。我需要做的


   "suppliers._id": 
       $regex: regex,
   ,
,

我只能搜索_id,因为这是我“建模”它的方式。

【讨论】:

以上是关于无法查询嵌套的猫鼬数组?的主要内容,如果未能解决你的问题,请参考以下文章

盒子地理空间查询中的猫鼬无法正常工作

更新混合类型的猫鼬嵌套数组

嵌套数组的猫鼬$或条件

嵌套模式/子文档对象中的猫鼬 findById() - 聚合

Mongoose 查询返回带有空数组的嵌套文档

嵌套数组上的猫鼬聚合