簡介
MongoDB 是非關系型數據庫瞳步。支持的數據結構非常松散,是類似 json 的 bson 格式嘀倒,因此可以存儲比較復雜的數據類型灌危。采用面向集合的存儲勇蝙,在 MongoDB 中,一個數據庫包含多個集合翁锡,類似于 MySQL 中一個數據庫包含多個表馆衔;一個集合包含多個文檔角溃,類似于 MySQL 中一個表包含多條數據。
數據庫的創(chuàng)建和刪除
使用 use
命令可以連接到指定的數據庫或者創(chuàng)建數據庫(不存在時):
> use mydb
查看當前連接的數據庫:
> db
查看所有的數據庫:
> show dbs
列出的所有數據庫中看不到 mydb
或者顯示 mydb(empty)
邪财,因為 mydb
為空,里面沒有任何東西怎憋,MongoDB 不顯示或顯示 mydb(empty)
绊袋。
使用 db.dropDatabase()
刪除數據庫:
> use local
switched to db local
> db.dropDatabase()
集合(collection)的創(chuàng)建和刪除
在數據庫 mydb
中創(chuàng)建一個集合
> use mydb
switched to db mydb
> db.createCollection("users")
查看創(chuàng)建的集合:
> show collections
或者
> show tables
刪除集合(刪除 users
集合):
> db.users.drop()
向集合中插入文檔
使用 insert()
插入數據時,如果 users
集合沒有創(chuàng)建會自動創(chuàng)建躁垛。
> use mydb
switched to db mydb
> db.users.insert([{name: 'tom', email: 'tom@qq.com'}, {name: 'jack', email: 'jack@qq.com'}])
查詢文檔
> db.post.insert([{
... title: 'MongoDB Overview',
... description: 'MongoDB is no sql database',
... by: 'tom',
... url: 'http://www.zhihu.com',
... tags: ['mongodb', 'database', 'NoSQL'],
... likes: 100
... }, {
... title: 'NoSQL Database',
... description: "NoSQL database doesn't have tables",
... by: 'jack',
... url: 'http://www.zhihu.com',
... tags: ['mongodb', 'database', 'NoSQL'],
... likes: 20,
... comments: [{
... user: 'user1',
... message: 'My first comment',
... dateCreated: new Date(2013, 11, 10, 2, 35),
... like: 0
... }]
... }])
> db.post.find()
{ "_id" : ObjectId("57dfad717c8486a21f40f529"), "title" : "MongoDB Overview", "d
escription" : "MongoDB is no sql database", "by" : "tom", "url" : "http://www.zh
ihu.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("57dfad717c8486a21f40f52a"), "title" : "NoSQL Database", "des
cription" : "NoSQL database doesn't have tables", "by" : "jack", "url" : "http:/
/www.zhihu.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 20, "com
ments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : I
SODate("2013-12-09T18:35:00Z"), "like" : 0 } ] }
> db.post.find().pretty()
{
"_id" : ObjectId("57dfad717c8486a21f40f529"),
"title" : "MongoDB Overview",
"description" : "MongoDB is no sql database",
"by" : "tom",
"url" : "http://www.zhihu.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
{
"_id" : ObjectId("57dfad717c8486a21f40f52a"),
"title" : "NoSQL Database",
"description" : "NoSQL database doesn't have tables",
"by" : "jack",
"url" : "http://www.zhihu.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 20,
"comments" : [
{
"user" : "user1",
"message" : "My first comment",
"dateCreated" : ISODate("2013-12-09T18:35:00Z"),
"like" : 0
}
]
}
說明:
使用 find()
語句查詢數據土铺,不加任何參數默認返回所有數據記錄。
pretty()
可以使查詢輸出的結果更美觀镀迂。
查詢結果排序
語法:
db.COLLECTION_NAME.find().sort({KEY: 1|-1})
升序用 1 表示探遵,降序用 -1 表示
更新文檔
基本語法:
> db.COLLECTION_NAME.update(criteria, objNew, upsert, multi)
參數說明:
criteria
:查詢條件
objNew
:update 對象和一些更新操作符
upsert
:如果不存在查詢的記錄,是否插入 objNew 這個新的文檔藏雏,true 為插入掘殴,默認為 false奏寨,不插入病瞳。
multi
:默認是 false,只更新找到的第一條記錄笼踩。如果為 true嚎于,把按條件查詢出來的記錄全部更新于购。
注意:
在使用參數 multi
時,multi update only works with $ operators嫌吠。也就是說辫诅,參數 multi
是和 $set
一起使用的。
> db.users.find()
{ "_id" : ObjectId("57dfaaf47c8486a21f40f526"), "name" : "tom", "email" : "tom@q
q.com" }
{ "_id" : ObjectId("57dfaaf47c8486a21f40f527"), "name" : "jack", "email" : "jack
@qq.com" }
> db.users.update({name: 'tom'}, {name: 'jerry'})
> db.users.find()
{ "_id" : ObjectId("57dfaaf47c8486a21f40f526"), "name" : "jerry" }
{ "_id" : ObjectId("57dfaaf47c8486a21f40f527"), "name" : "jack", "email" : "jack
@qq.com" }
> db.users.update({name: 'jack'}, {$set: {name: 'jerry'}})
> db.users.find()
{ "_id" : ObjectId("57dfaaf47c8486a21f40f526"), "name" : "jerry" }
{ "_id" : ObjectId("57dfaaf47c8486a21f40f527"), "name" : "jerry", "email" : "jac
k@qq.com" }
> db.users.update({name: 'jerry'}, {$set:{name: 'fuck'}}, false, true)
> db.users.find()
{ "_id" : ObjectId("57dfaaf47c8486a21f40f526"), "name" : "fuck" }
{ "_id" : ObjectId("57dfaaf47c8486a21f40f527"), "name" : "fuck", "email" : "jack
@qq.com" }
補充:
$set
用法:{$set: {field: value}}
作用:把文檔中某個字段 field 的值設為 value
刪除文檔
基本語法:
> db.COLLECTION_NAME.remove(criteria, justOne)
參數說明:
criteria
:查詢條件(可選)
justOne
:(可選)如果設置為 true 或 1,只取出一個文檔
注意:
如果沒有指定刪除條件涉枫,則 MongoDB 將從集合中刪除整個文件
> db.users.remove({})
MongoDB 中的 AND
當 find()
中傳入多個鍵值對時困后,MongoDB 就會將其作為 AND 查詢處理。用法:
> db.post.find(
{
key1: value1,
key2: value2
}
).pretty()
> db.post.find({"by":"tom","title": "MongoDB Overview"}).pretty()
{
"_id" : ObjectId("57dfad717c8486a21f40f529"),
"title" : "MongoDB Overview",
"description" : "MongoDB is no sql database",
"by" : "tom",
"url" : "http://www.zhihu.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
MongoDB 中的 OR
MongoDB 中趾盐,OR 查詢語句以 $or
作為關鍵詞,用法如下:
> db.post.find(
{
$or: [
{key1: value1},
{key2:value2}
]
}
).pretty()
> db.post.find({$or: [{by: "tom"}, {title: "NoSQL Database"}]}).pretty()
{
"_id" : ObjectId("57dfad717c8486a21f40f529"),
"title" : "MongoDB Overview",
"description" : "MongoDB is no sql database",
"by" : "tom",
"url" : "http://www.zhihu.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
{
"_id" : ObjectId("57dfad717c8486a21f40f52a"),
"title" : "NoSQL Database",
"description" : "NoSQL database doesn't have tables",
"by" : "jack",
"url" : "http://www.zhihu.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 20,
"comments" : [
{
"user" : "user1",
"message" : "My first comment",
"dateCreated" : ISODate("2013-12-09T18:35:00Z"),
"like" : 0
}
]
}
同時使用 AND 和 OR
> db.post.find({
likes: {$gt: 20},
$or: [
{by: "tom"},
{title: "NoSQL Database"}
]
}).pretty()
條件操作符說明:
$gt
表示大于
$lt
表示小于
$lte
表示小于等于
$gte
表示大于等于
$ne
表示不等于