一、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"的數據