Javascript MongoDB查询嵌套模式

Javascript MongoDB查询嵌套模式,javascript,node.js,mongodb,mongoose,nosql,Javascript,Node.js,Mongodb,Mongoose,Nosql,我有以下模式: 产品架构: _id: String name: String description: String company: Company 公司架构: _id: String name: string 我正在尝试查找所有与名称或公司名称匹配的查询字符串 我已经试过了: const query: any[] = [ { "company.name": { $regex: name, $options: "i"

我有以下模式:

产品架构:

_id: String
name: String
description: String
company: Company
公司架构:

_id: String
name: string
我正在尝试查找所有与名称或公司名称匹配的查询字符串

我已经试过了:

const query: any[] = [
  {
    "company.name": {
      $regex: name,
      $options: "i",
    },
  },
  {
    "name": {
      $regex: name,
      $options: "i",
    },
  }
];

return Product.find()
  .or(query)
  .populate("company")
数据-产品:

{ _id: "6067b7d7b5913759d9bb8b39", "name": "Test 1", "description": "Desc", "company": "6067b809c78a4a39ebeae4d4" }
数据-公司:

{ _id: "6067b809c78a4a39ebeae4d4", "name": "Facebook" }, 
{ _id: "59862209c78a4a39ebeae4d4", "name": "Apple" },

此查询将仅筛选产品,在您的情况下不起作用,因为您希望按
公司进行筛选。名称也要按
进行筛选

Product.find()
  .or(query)
  .populate("company")

演示-

使用聚合查询来实现这一点

db.companies.aggregate([
  { $lookup: { "from": "products", "localField": "_id",  "foreignField": "company",  "as": "products"} },
  { $unwind: "$products" },
  { $match: {
    $or: [
        { "name": { $regex: "Test 1",$options: "i", }, },
        { "products.name": { $regex: "Test 1",$options: "i" } }
    ]}
  }
])