日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【知识小课堂】 mongodb 之 objectId

發布時間:2024/4/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【知识小课堂】 mongodb 之 objectId 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


?一、OBJECTID


因公司開發人員在使用MONGODB時,總遇到一些小問題。為了增加大家的mongodb 數據庫知識。
決定每周進行一、兩次的知識小課堂。這里把內容整理出來,上傳到博客中。也算是自己的一個mongodb 歷程吧


1.1 結構





ObjectId("52cbab42231dea1e819b2a37"),
ObjectId("52cbab5b231dea1e819b2a38"),
ObjectId("52cbab70231dea1e819b2a39"),


52cbab70 ??? ?時間戳
231dea?? ??? ?機器號
1e81?? ??? ?進程ID
9b2a39?? ?自增數

以上數字為 16進制表示


特點:



1.24個16進制數據,使用 12字節的存儲空間。

2.最后3個字節為:自動增長。可確保每秒生成的值也不一樣,一秒最多允許每個進程擁有256^3個不同ObjectId

(后面3位16進制存在量可以達到: 16,777,216
也可以從存儲量計算出來 FFFFFF 轉換成10進制就是16,777,215)


3.可轉移到客戶端生成,而減輕服務器負擔(需要客戶端的驅動程序)


下面介紹幾個相關的函數


>> x=ObjectId() ObjectId("53b3a89bf988c39955a30f9e") > x ObjectId("53b3a89bf988c39955a30f9e") >x.str 53b3a89bf988c39955a30f9e> x.toString() ObjectId("53b3a89bf988c39955a30f9e") > x.getTimestamp() ISODate("2014-07-02T06:37:15Z") > x.valueOf() 53b3a89bf988c39955a30f9e >


函數說明:

1.Str 功能 與valueOf()相同

2.toString()? 把一個對象轉換成

了一字串。這時兩個objectId可以對比。

3.getTimestamp() 抽取 時間


我們再來看看一個有意思的查詢:

既然可以把從objectId 獲取日期,那我是否可以使用一個日期做為條件,使用_id 字段來進行查詢呢。

我的方法是?

?使用 函數? getTimestamp()先把字段 進行處理,這在一般的關系型數據庫非常常用。

<span style="font-size:18px;">> a = db.order.findOne() {"_id" : ObjectId("5331128631a4804b226471e4"),"md5" : "cacae8722c325d62e795e5c273d5f49b",…… } > a."_id" Wed Jul 2 14:50:57.494 SyntaxError: Unexpected string > a._id.getTimestamp() ISODate("2014-03-25T05:22:14Z") > new Date("2014,03,25") ISODate("2014-03-24T16:00:00Z") > new Date("2014,03,25") ISODate("2014-03-24T16:00:00Z") > db.order.find({"_id.getTimestamp()":{$gt:new Date("2014,03,25")}}).count() 0 > db.order.find({_id.getTimestamp():{$gt:new Date("2014,03,25")}}).count() Wed Jul 2 14:54:00.298 SyntaxError: Unexpected token . > </span>




可以看到,看來是行不通。mongodb 無法識別 處理后的字段。

那只能自己生成一個objectId 再進行對比了。

我以前一直以為是無法進行兩個 objectId 來進行對比的。

但查詢了官方資料。并沒有看到相關按時間生成新的objectID 的方法/函數。

(http://docs.mongodb.org/manual/reference/method/)


后來找到了開發牛人的一個便方,解決了此問題。代碼如下:


<span style="font-size:18px;">#構建一個指定日期的objectId() > var timestamp = Math.floor(new Date(2014,03,01).getTime() / 1000); #getTime() 返回毫秒數 > var hex = (‘00000000’ + timestamp.toString(16)).substr(-8); #前填充0 > var v_objectId = new ObjectId(hex + new ObjectId().str.substring(8)); #更換掉前面的時間值 </span>

其它方法也比較簡單,就是把一個日期轉換成16進制后,替換到一個新生成的objectId 中去。



當自己構造好一個objectId后,后面我們來使用它進行查詢:

<span style="font-size:18px;">#用objectId() 來進行對比查詢 > db.order.find({_id:{$gt:v_objectId}}) { "_id" : ObjectId("533e1049e4271af009000005"), "md5" : "a99038f392284b7dac895dc0030486c8", ...} </span>
可以看到,查詢結果出來了。從上面可以看出。兩個objectId 是可以進行對比的。


從上面示例代碼看到

雖然可以從ojbectId 中提取一些信息。但如果要使用 objectid中的信息來做為查詢條件,相對還是比較麻煩的。

就象我上面的,如果我要從objectID 的建立日期 來做為查詢條件,我自己得先用查詢時間構建一個objectID,然后再進行查詢。

如果查詢條件還有范圍什么的。還不如再建立一個字段create_dt 來保存記錄的建立時間。以后查詢統計用此字段,還更方便。




我們再來看看查詢的計劃,看到已使用了索引,此計劃雖然不能說明什么。但也可以讓我知道是用_id 字段的索引。


<span style="font-size:18px;">> db.order.find({_id:{$gt:v_objectId}}).explain() {"cursor" : "BtreeCursor _id_","isMultiKey" : false,"n" : 3,"nscannedObjects" : 3,"nscanned" : 3,"nscannedObjectsAllPlans" : 3,"nscannedAllPlans" : 3,"scanAndOrder" : false,"indexOnly" : false,"nYields" : 0,"nChunkSkips" : 0,"millis" : 0,"indexBounds" : {"_id" : [[ObjectId("533991005c1e4132ccbaf755"),ObjectId("ffffffffffffffffffffffff")]]},"server" : "localhost.localdomain:27017" } > </span>


總結

以上是生活随笔為你收集整理的【知识小课堂】 mongodb 之 objectId的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文人妻熟妇乱又伦精品 | 欧美丰满美乳xxx高潮www | 光棍福利视频 | 6090伦理| 日本一区二区三区免费看 | 亚洲欧美另类一区 | 麻豆视频免费网站 | 在线观看国产免费视频 | 欧美肥老妇视频九色 | 黄色片一区二区三区 | 九九热最新网址 | 少妇aaaaa| 精品国产免费人成在线观看 | 日韩专区欧美专区 | 精品国模| 快播日韩 | 97视频| 九九九热视频 | 中文字幕影片免费在线观看 | 96久久久| 天天看片天天射 | 欧美日韩免费在线观看 | 亚洲乱亚洲乱妇 | 精品少妇人妻av免费久久洗澡 | 用力抵着尿进去了h | 日韩中文字幕免费观看 | 国产激情一区 | 黄色片视频播放 | 亚洲欧美国产日韩精品 | 成人青青草 | 一区二区三区av夏目彩春 | 在线va| 国产精品无码网站 | 精品国产aⅴ | 国产男人的天堂 | av久久久 | 四虎午夜影院 | 欧美日韩另类在线 | 欧美日韩中文字幕一区二区 | av性天堂网| 黄色影音 | 黄色一级视频网站 | 天天干天天干 | 日本精品视频一区二区 | 亚洲va国产天堂va久久 en | 好看的黄色录像 | 欧美人妻精品一区二区 | 国产一级色 | 国产精品麻豆成人av电影艾秋 | 国产美女作爱全过程免费视频 | 日本免费一二三区 | 中文字幕偷拍 | 久操av在线 | 97超碰伊人| 性猛交xxxx乱大交孕妇2十 | 国产一区二区三区 | 中国免费看的片 | 久久久精品视频免费 | 免费不卡av在线 | 亚洲精品资源在线 | 精产国产伦理一二三区 | 日批视频在线看 | 成人午夜精品一区二区 | 国产探花在线精品一区二区 | 国产精品91在线 | 日韩欧美xxxx | 香蕉视频免费看 | 91l九色lporny | av最新网址 | 超碰中文字幕 | 一级免费在线 | 久久精品视频中文字幕 | 色涩视频在线观看 | 日韩天堂在线观看 | 久久亚洲一区二区三区四区 | 一边吃奶一边摸做爽视频 | 在线观看精品国产 | 韩国av一区二区三区 | 日本三级一区 | 成人动漫免费在线观看 | 成人h动漫精品一区二区器材 | 黄色一集片 | 色偷偷影院 | 午夜色网站 | 日韩精品色 | 请用你的手指扰乱我吧 | 98成人网 | 交专区videossex另类 | 久久成人国产精品 | 成人做爰免费视频免费看 | 精品99在线 | 国产特级av | 激情久久久久久久 | 日本不卡一区二区在线观看 | 密臀av一区二区 | 欧洲黄色录像 | 久久久久久久久久久国产 | 蜜桃tv在线观看 | 中文字幕日韩一区二区 |