2012-02-28 23 views
1

所以,也許我已經明白做錯事,因爲我是從SQL世界我:我有一個產品集合:MongoDB的動態值

_id: "0234weasq43rq", 
title: "Panasonic", 
descr: "blah blah", 
price: 132, 
specifications { 
    weight: 135, 
    color: "black", 
    type: "LCD", 
    diagonal: 50 
} 

_id: "0234weasq43rq", 
title: "Samsung Galaxy Tab", 
descr: "blah blah", 
price: 132, 
specifications { 
    weight: 135, 
    color: "white", 
    standard: "GSM", 
    wifi: "Yes" 
} 

我可以爲不同的商品類別不同規格(如電話和電腦)?如果不是所有商品都有「對角線」規格,那麼使用goods.find(specifications { diagonal: 50 })這樣的查詢來查找商品時是否有問題?

謝謝!

回答

2

是的,即使在同一個集合中,您的文檔可能會有完全不同的結構。在您的示例中,查詢將返回對角線數爲50的商品,並省略沒有對角線定義的文檔(或明確定義但不是50的文檔)

+0

好的,還有一個問題:我可以使用大於/小於運算符的查詢示例(例如:specifications {diagonal:{$ gt:3}})? – 2012-02-28 08:51:55

+1

是的,你可以。你實際上可以在mongo shell中測試所有這些。它很容易使用。 – Eduardo 2012-02-28 09:02:41

1

我可以爲不同類別的商品保留不同的規格 (例如手機和電腦)?

相同的集合可以具有不同結構的文檔。因此,對於您的情況,您可以針對不同類別的商品保留不同的規格。

是否有發現使用查詢商品,比如 goods.find任何麻煩(規格{對角線:50}),如果不是所有商品都 一個「對角線」規範?

不,絕對。有一件事可能對你有用,那就是sparse索引中沒有出現在所有文檔中的字段(例如對角字段)。該索引不包括沒有此字段的文檔。