MongoDB索引每个产品中的许多类别,数据建模

时间:2013-09-24 06:03:04

标签: mongodb database-design relational-database

从MySQL数据库迁移到MongoDB,我必须在产品目录中复制此功能:

  1. 每个产品都有多个类别
  2. 每个类别都有每个类别中产品的名称,ID和位置
  3. 按类别查询产品,按类别排名或其他字段(如价格和标签)进行排序时的效果
  4. 这是我提出的模型的一个例子

    {
       ...
       categories: [
           {
               name: 'Clothing',
               category_id: 1,
               position: 0
           },
           {
               name: 'Bottoms',
               category_id: 2,
               position: 2
           },
           {
               name: 'Jeans',
               category_id: 5,
               position: 0
           }
       ]
    }
    

    我应该将name,category_id和position分隔到不同的顶级字段中进行索引吗?

1 个答案:

答案 0 :(得分:2)

提供您的文档示例似乎无法通过此类别位置进行有效索引来按类别执行搜索

当然,您可以索引“位置”,“名称”并运行查询

db.coll.find({"categories.name": "Jeans"}).sort({"categories.position": -1})

但是根据所需的类别进行排序是不合适的。

我建议有文件部分:

{
  ...
  "categories": ["Clothing", "Bottoms", "Jeans"],
  "positions": {
    "Clothing": 0,
    "Bottoms": 2,
    "Jeans": 0
  }
}

然后您就可以运行查询

db.coll.find({categories: "Jeans"}).sort({"positions.Jeans": -1})