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" } }
]}
}
])