Mongo 中collection相當于MySQL的表,那么當我有下面需求時,我應該如何設計我的collection及字段(key/value結構)? 場景及需求描述: 記錄用戶每次登錄的業(yè)務標識及ip,以及登錄時間 指定qid、ip需要查詢該ip是否已經(jīng)存在 針對上述需求,我的collection應
Mongo 中collection相當于MySQL的表,那么當我有下面需求時,我應該如何設計我的collection及字段(key/value結構)?
場景及需求描述:
針對上述需求,我的collection應該如何設計?
目前有兩種方案,正在糾結于哪個更好一些:
[cc lang="javascript"]
{‘userid’:$userid,’appid’:$appid,’ip’:$ip,’logintime’:timestamp}
[/cc]
[cc lang="javascript"]
{‘userid’:$userid,
‘appid’:$appid,
‘ipArr’:{
{‘ip’:$ip1,’logintime’:$timestamp1},
{‘ip’:$ip2,’logintime’:$timestamp2}
}
}
[/cc]
第一種方案,清晰,多對多的關系。足夠的明朗!相對查詢條件應該足夠的簡單:findOne({userid:$userid,appid:$appid,ip:$ip});
第二種方案,一對多的關系,查詢起來指定條件比較麻煩!findOne({userid:$userid,appid:$appid,ipArr.ip:$ip});
注明:上述說的查詢語句可能不準確(剛接觸Mongo)
那么到底應該選擇哪種?又如何來創(chuàng)建合適的索引?
別急,現(xiàn)在增加一個新的需求:每個用戶,同一業(yè)務,只記錄最新的5條記錄!
好吧,我現(xiàn)在還不確定方案如何選擇,以及最后一個需求具體該如何實現(xiàn)。明天和同事們討論,更新本日志Mark一下!
PS:是不是使用PHP來做條數(shù)限制會更好一些?
最終決定采用第二種方案,實現(xiàn)上通過PHP的client端獲取用戶ip數(shù)組,使用PHP來操作數(shù)組元素的增加及刪除,最后再upsert至Mongo中。
使用php的查詢條件可以如下(取決于你想取什么,實際實現(xiàn)上userid及appid即可限制條件了)
[cc lang="php"]
var_dump($monObj->remove(array(‘userid’=>’1234567′,’appid’=>’abc’,'ipArr’=>array(‘$elemMatch’=>array(‘ip’=>’127.0.0.0.1′)))));
[/cc]
原文地址:思考題:如下場景如何設計mongo collection, 感謝原作者分享。
聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com