node.js - 有没有一种方法可以比 .populate() 更有效地验证 mongoose 中的相关文档并将其聚合在一起
问题描述
鉴于这些模型:
产品:
const productSchema = new Schema({
name: String,
description: String,
price: Number,
steps: [{
type: Schema.Types.ObjectId,
ref: 'steps'
}]
});
脚步:
const stepSchema = new Schema({
name: String,
minimum: Number,
maximum: Number,
items: [
{
name: String,
price: Number
}
]
});
有没有更好的方法来查询具有 N 个产品的对象,而不是选择所有 products.steps 而不使用 .populate() (因为它会请求 products.steps 数组中的每个值)和一个 for 循环将 productSchema 和 stepSchema 中包含的所有价格相加?
使用示例:
在我的文件中,我有这样的产品集合:
[{
id: 1
name: Pizza,
description: "Medium (3 flavors)",
price: 10,
steps: [{
"1",
"2"
}]
},
{
id: 2
name: Pizza,
description: "small (1 flavors)",
price: 10,
steps: [{
"1",
}]
}]
步骤如下:
[{
id: 1
name: "Flavor",
minimum: 0,
maximum: 1,
items: [
{
id: 1
name: "mozzarella",
price: 4
},
{
id: 2
name: "pepperoni",
price: 5
}
]
},
{
id: 2
name: "Border",
minimum: 0,
maximum: 0,
items: [
{
id: 3
name: "With normal cheese",
price: 0
},
{
id: 4
name: "With special cheese",
price: 3
}
]
}]
那么有没有更好的方法来验证我的 BD 中这样的对象,而查询更少且没有 for 循环?
products: [
{
productId: 1,
price: 30,
quantity: 3,
steps: [{
stepId: 1
items: [
{
itemId: 1,
price: 4
},
{
itemId: 2,
price: 5
}
]
}]
}
]
解决方案
我认为应该遵循以下步骤:
推荐阅读
- r - 将概率模型拟合到 3 个标准正态协变量的 200 个观测值
- c# - 将类型“Emgu.CV.Mat”转换为“Emgu.CV.Image”
' - sql - 如何在 SQL WHERE 子句中包含条件 OR 语句
- java - 使用四元数移动
- laravel - Laravel:如果失败,如何以编程方式运行作业 5 次?
- c++ - 在(例如)循环中初始化一个变量会比只使用一个已经定义的变量效率低吗?
- python - 根据子字符串限制将字符串列表拆分为列表列表
- r - apply() 函数仅适用于某些列
- hash - 使用 pbkdf2_sha512 将用户迁移到 Google Identity Platform
- sql - 在 pgadmin4 中更新导入的 CSV 文件