最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

思考題:如下場(chǎng)景如何設(shè)計(jì)mongocollection

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 13:25:06
文檔

思考題:如下場(chǎng)景如何設(shè)計(jì)mongocollection

思考題:如下場(chǎng)景如何設(shè)計(jì)mongocollection:Mongo 中collection相當(dāng)于MySQL的表,那么當(dāng)我有下面需求時(shí),我應(yīng)該如何設(shè)計(jì)我的collection及字段(key/value結(jié)構(gòu))? 場(chǎng)景及需求描述: 記錄用戶每次登錄的業(yè)務(wù)標(biāo)識(shí)及ip,以及登錄時(shí)間 指定qid、ip需要查詢?cè)搃p是否已經(jīng)存在 針對(duì)上述需求,我的colle
推薦度:
導(dǎo)讀思考題:如下場(chǎng)景如何設(shè)計(jì)mongocollection:Mongo 中collection相當(dāng)于MySQL的表,那么當(dāng)我有下面需求時(shí),我應(yīng)該如何設(shè)計(jì)我的collection及字段(key/value結(jié)構(gòu))? 場(chǎng)景及需求描述: 記錄用戶每次登錄的業(yè)務(wù)標(biāo)識(shí)及ip,以及登錄時(shí)間 指定qid、ip需要查詢?cè)搃p是否已經(jīng)存在 針對(duì)上述需求,我的colle

Mongo 中collection相當(dāng)于MySQL的表,那么當(dāng)我有下面需求時(shí),我應(yīng)該如何設(shè)計(jì)我的collection及字段(key/value結(jié)構(gòu))? 場(chǎng)景及需求描述: 記錄用戶每次登錄的業(yè)務(wù)標(biāo)識(shí)及ip,以及登錄時(shí)間 指定qid、ip需要查詢?cè)搃p是否已經(jīng)存在 針對(duì)上述需求,我的collection應(yīng)

Mongo 中collection相當(dāng)于MySQL的表,那么當(dāng)我有下面需求時(shí),我應(yīng)該如何設(shè)計(jì)我的collection及字段(key/value結(jié)構(gòu))?

場(chǎng)景及需求描述:

  1. 記錄用戶每次登錄的業(yè)務(wù)標(biāo)識(shí)及ip,以及登錄時(shí)間
  2. 指定qid、ip需要查詢?cè)搃p是否已經(jīng)存在

針對(duì)上述需求,我的collection應(yīng)該如何設(shè)計(jì)?

目前有兩種方案,正在糾結(jié)于哪個(gè)更好一些:

  • 方案一
  • [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]

    第一種方案,清晰,多對(duì)多的關(guān)系。足夠的明朗!相對(duì)查詢條件應(yīng)該足夠的簡(jiǎn)單:findOne({userid:$userid,appid:$appid,ip:$ip});

    第二種方案,一對(duì)多的關(guān)系,查詢起來(lái)指定條件比較麻煩!findOne({userid:$userid,appid:$appid,ipArr.ip:$ip});

    注明:上述說(shuō)的查詢語(yǔ)句可能不準(zhǔn)確(剛接觸Mongo)

    那么到底應(yīng)該選擇哪種?又如何來(lái)創(chuàng)建合適的索引?

    別急,現(xiàn)在增加一個(gè)新的需求:每個(gè)用戶,同一業(yè)務(wù),只記錄最新的5條記錄!

    好吧,我現(xiàn)在還不確定方案如何選擇,以及最后一個(gè)需求具體該如何實(shí)現(xiàn)。明天和同事們討論,更新本日志Mark一下!
    PS:是不是使用PHP來(lái)做條數(shù)限制會(huì)更好一些?

    最終決定采用第二種方案,實(shí)現(xiàn)上通過PHP的client端獲取用戶ip數(shù)組,使用PHP來(lái)操作數(shù)組元素的增加及刪除,最后再upsert至Mongo中。

    使用php的查詢條件可以如下(取決于你想取什么,實(shí)際實(shí)現(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]

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    思考題:如下場(chǎng)景如何設(shè)計(jì)mongocollection

    思考題:如下場(chǎng)景如何設(shè)計(jì)mongocollection:Mongo 中collection相當(dāng)于MySQL的表,那么當(dāng)我有下面需求時(shí),我應(yīng)該如何設(shè)計(jì)我的collection及字段(key/value結(jié)構(gòu))? 場(chǎng)景及需求描述: 記錄用戶每次登錄的業(yè)務(wù)標(biāo)識(shí)及ip,以及登錄時(shí)間 指定qid、ip需要查詢?cè)搃p是否已經(jīng)存在 針對(duì)上述需求,我的colle
    推薦度:
    標(biāo)簽: 如何 設(shè)計(jì) 如下
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top