若是使用MongoDB的話,應該如何存取數據呢?html
若是使用MongoDB的話,雖然理論上能夠採用和MySQL同樣的設計方案,但那樣的話就顯得無趣了,沒有發揮出MongoDB做爲文檔型數據庫的優勢,實際上使用MongoDB的話,和MySQL相比,形象一點來講,能夠合二爲一:數據庫
db.getCollection(
"
mobiles
"
).ensureIndex({
"
params.name
"
:
1
,
"
params.value
"
:
1
});
db.getCollection(
"
mobiles
"
).insert({
"
_id
"
:
1
,
"
name
"
:
"
ME525
"
,
"
brand
"
:
"
摩托羅拉
"
,
"
params
"
: [
{
"
name
"
:
"
待機時間
"
,
"
value
"
:
200
},
{
"
name
"
:
"
外觀設計
"
,
"
value
"
:
"
直板
"
}
]
});
db.getCollection(
"
mobiles
"
).insert({
"
_id
"
:
2
,
"
name
"
:
"
E7
"
,
"
brand
"
:
"
諾基亞
"
,
"
params
"
: [
{
"
name
"
:
"
待機時間
"
,
"
value
"
:
500
},
{
"
name
"
:
"
外觀設計
"
,
"
value
"
:
"
滑蓋
"
}
]
});
若是想查詢待機時間大於100小時,而且外觀設計是直板的手機,須要按照以下方式查詢:ide
db.getCollection(
"
mobiles
"
).find({
"
params
"
: {
$all: [
{$elemMatch: {
"
name
"
:
"
待機時間
"
,
"
value
"
: {$gt:
100
}}},
{$elemMatch: {
"
name
"
:
"
外觀設計
"
,
"
value
"
:
"
直板
"
}}
]
}
});
注:查詢中用到的$all,$elemMatch等高級用法的詳細介紹請參考官方文檔中相關說明。spa
MySQL須要多個表,屢次查詢才能搞定的問題,MongoDB只須要一個表,一次查詢就能搞定,對比完成,相對MySQL而言,MongoDB顯得更勝一籌,至少本例如此設計