2013-09-24 43 views
0

從MySQL數據庫MongoDB的移動,我有一個產品目錄複製此功能:MongoDB的索引許多類別中每一種產品,數據建模

  1. 每個產品都有多個類別
  2. 每個類別都有一個姓名,身份證以及產品的位置在每個類別
  3. 查詢產品按類別時,按類別位置或其他領域,如價格和標籤分揀性能

這是我想出的模型的一個例子

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

我是否應該將名稱,category_id和位置分隔到不同的頂級字段中進行索引?

+0

不能得到什麼位置字段代表什麼嗎? – hevi

+0

@hevi位置字段用於對類別內的產品進行排序。例如。在底部類別中,我們使用值2對位置DESC進行排序。 –

回答

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}) 
相關問題