mongoDB的ObjectId和查詢條件


一、ObjectId

在插入數據時,mongoDB 會自動生成"_id",默認生成的"_id"屬於 ObjectId 對象,作用類似於身份證號用來標識每一條數據。

 ObjectId 是一個12字節(16進制) BSON 類型數據,格式分四部分組成4|3|2|3:

  • 4個字節時間戳
  • 3個字節機器標識碼
  • 2個字節進程id(PID)
  • 3個字節隨機數
例如:ObjectId("5f09c1779a5b2a836d9000b3")    //5f09c177 9a5b2a 836d 9000b3
5f09c177         //時間戳
9a5b2a           //機器標識碼
836d             //進程id
9000b3           //隨機數(自動增加的計數器)

因為 ObjectId 中存儲了時間戳,所以可以直接從中獲取時間信息:

ObjectId("5f09c1779a5b2a836d9000b3").getTimestamp()     //獲取時間信息

 也可以再進行獲取年月日時分秒信息,如下:

ObjectId("5f09c1779a5b2a836d9000b3").getTimestamp().getFullYear()     //
ObjectId("5f09c1779a5b2a836d9000b3").getTimestamp().getMonth()        //月,注意這里的月份是從0開始的(0-11),所以實際使用時可能需要加1
ObjectId("5f09c1779a5b2a836d9000b3").getTimestamp().getDate()         //
ObjectId("5f09c1779a5b2a836d9000b3").getTimestamp().getHours()        //時,注意這里的加了8
ObjectId("5f09c1779a5b2a836d9000b3").getTimestamp().getMinutes()      //
ObjectId("5f09c1779a5b2a836d9000b3").getTimestamp().getSeconds()      //

二、查詢條件(query)

查詢條件在很多地方都可以用到,比如 find() | findOne() | update() | remove | aggregate() 里的 $match 等

1. 比較大小:

  • (>) 大於 - $gt
  • (<) 小於 - $lt
  • (>=) 大於等於 - $gte
  • (<= ) 小於等於 - $lte
  • (=) 等於 - $eq
  • (!=) 不等於 - &ne

例:

db.grades.find({English:{$gt:90}})      //查詢英語成績大於90的數據

 2. and, in 和 or

db.grades.find({$and:[{English:{$gt:60}},{name:"Bob"}]})   //and 條件並列查詢

db.grades.find({name:{$in:['Tim','John']}})             //in 多值查詢

db.grades.find({$or:[{English:{$gt:60}},{name:"Bob"}]})   //or 條件或查詢

db.grades.find({English:{$exists:false}})    //查詢English字段不存在的數據

 3. 正則查詢(Regex)

db.grades.find({name:/J/})   //模糊查詢名字中含字母"J"的數據

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM