基本概念
MongoDB由Databases組成,可通過use切換不同的DB澡为。
Databases由Collections(類比mysql的Table)組成漂坏。
Collection由Documents(類比mysql的row)組成。
Document由Fields(類比mysql的column)組成。-
基本數(shù)據(jù)類型
概念上顶别,MongoDB的文檔類似于Javascript中的對象谷徙,類似于JSON- null
表示空值或者不存在的字段 - 布爾類型
true或者false - 數(shù)值
默認采用64位浮點型
整數(shù)可以采用NumberInt(4字節(jié)帶符號整型)或者NumberLong(8字節(jié)帶符號整型):
{"x": NumberInt("5")}
{"x": NumberLong("5")}
- 字符串
- 日期
日期被存儲為自新紀元以來的毫秒數(shù),不存儲時區(qū)筋夏。 - 正則表達式
查詢時蒂胞,使用正則作為限定條件
{"x": /abc123/i}
- 內(nèi)嵌文檔
文檔嵌套其他文檔
{"x": {"y": "abc"}}
- 對象id
對象id是一個12字節(jié)的ID图呢,是文檔的唯一標識
{"x": ObjectId()}
- null
- 基本操作
插入
db.foo.insert() :插入
db.foo.insert({"name": "abc", "age": 25})
db.foo.batchInsert() :批量插入
db.foo.batchInsert([{"name": "abc", "age": 12}, {"name": "edf", "age": 23}])
刪除
db.foo.remove() :不加參數(shù)會刪除所有的文檔条篷,但是不會刪除foo這個collection
db.foo.remove({"name": "abc"})
db.foo.drop() :刪除集合-
更新
db.foo.update({"name": "abc"}, {"name": "hihi"})
不同于mysql,mongo會將后者完全替代第一個參數(shù)查出來的文檔
如果想只更新某一些值:- 先查出這個文檔蛤织,修改其中的值赴叹,然后用update替換
- 使用修改器,
set
db.foo.update({"name": "abc"}, {"$set": {"name": "edf"}})
db.foo.update({"name": "abc", {"$inc": {"age": 5}}})
upsert
第三個參數(shù)加 true乞巧,可以在不存在的時候,插入這個文檔
db.foo.update({"name": "abc"}, {"name":"hihi", "age":12}, true)
-
其他修改器
- $push
如果數(shù)組存在摊鸡,則向數(shù)組末尾添加一個元素绽媒,不存在則先創(chuàng)建一個新的
- $push
更新多個文檔
將update的第四個參數(shù)設(shè)為true,可以更新多個文檔
數(shù)組免猾。
mongodb db.blog.posts.update({ "title": "A new blog" }, { "$push": {"comments": {"name": "hello", "email": "hello@gmail.com", "comments": ""Good post.}} })
2. $addToSet
可以向數(shù)據(jù)集添加新的元素是辕,如果已經(jīng)存在,則不會重復插入
```
db.blog.user.insert({
"name": "abc",
"email": ["abc@163.com"]
})
db.blog.user.update({"name": "abc"},
{"$addToSet": {"email": "abc@hotmail.com"}
})
```
3. $pop
從數(shù)組中取出元素猎提,1表示從尾刪除获三,-1從頭刪除
```
db.blog.user.update({"name":"nannan"}, {"$pop":{"email": -1}})
```
4. $pull
可以將數(shù)組中所有相等的值取出

