问题描述
我在用猫鼬。我有一个产品目录,这就是设计方案的方式(我对其进行了很多简化以使其更易于理解):
const ProductSchema = new Schema(
{
listing: { type: ProductListingSchema,required: true },images: { type: [ProductImageSchema],default: [] },pricing: { type: ProductPricingSchema,type: {
type: String,default: "UndefinedProduct",enum: ["LaptopProduct","UndefinedProduct"],},quantity: { type: Number },);
ProductSchema包含所有产品将具有的属性。然后,对于随产品类型而异的属性,我使用鉴别器,该鉴别器使用属性“ type”来识别适当的模式。 这是“ LaptopProduct”架构
const LaptopProductSchema = new Schema(
{
details: {
model: {type: String },os: {type: String},screenSize: { type: String },hdd: { type: String },ssd: { type: String},ram: { type: String },graphicsProcessor: { type: String },processor: { type: String }
},}
);
const LaptopProductModel = Product.discriminator("LaptopProduct",LaptopProductSchema)
这就是我用来过滤笔记本电脑目录的代码所要做的(这只是管道的一小段,我在其中查询用户将用于分面搜索产品的值):
let facetsPipeline: any[] = [
{ $match: initialMatch },{
$group: {
_id: null,brand: { $addToSet: "$manufacturer.brand" },condition: { $addToSet: "$condition" },screenSize: { $addToSet: "$details.screenSize" },hdd: { $addToSet: "$details.hdd" },ssd: { $addToSet: "$details.ssd" },ram: { $addToSet: "$details.ram" },graphicsProcessor: { $addToSet: "$details.graphicsProcessor" },processor: { $addToSet: "$details.processor" },];
我担心随着我的应用程序扩展和我添加更多产品类型,性能将不够。我已经添加了以下索引:
LaptopProductModel.collection.createIndex({ "details.model": 1 });
LaptopProductModel.collection.createIndex({ "details.os": 1 });
LaptopProductModel.collection.createIndex({ "details.screenSize": 1 });
LaptopProductModel.collection.createIndex({ "details.hdd": 1 });
LaptopProductModel.collection.createIndex({ "details.ssd": 1 });
LaptopProductModel.collection.createIndex({ "details.ram": 1 });
LaptopProductModel.collection.createIndex({ "details.graphicsProcessor": 1 });
LaptopProductModel.collection.createIndex({ "details.processor": 1 });
我仍然是mongodb的新手,我计划很快将我的应用程序投入生产。我想确保这种方法足够好。我应该做不同的事情吗?如果您花时间阅读我的询问,请先谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)