如果我在mongodb中使用$ group而不是$ facet,我的应用程序扩展时会遇到性能问题吗?

问题描述

我在用猫鼬。我有一个产品目录,这就是设计方案的方式(我对其进行了很多简化以使其更易于理解):

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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...