基本概念
sql
monogodb
说明
database
database
数据库
table
collection
数据库表/集合
row
document
数据记录行/文档
column
field
数据字段/域
index
index
索引
table joins
-
表连接/mongodb不支持
primary key
primary key
主键,mongodb自动将_id字段设为主键
创建数据库 use database_name
1 2 3 use database_name // 如果数据库不存在,则创建数据 // 否则切换到指定数据库
查看所有数据库 show dbs
删除数据库 db.dropDatabase()
(先切换到当前 use doyouSocket)
1 2 db.dropDatabase() // 删除当前数据库
删除集合(表) db.collection.drop()
1 2 3 4 5 6 7 8 9 // 删除了runoob数据库中的集合site > use runoob switched to db runoob > show tables site > db.site.drop() true > show tables >
创建集合 db.createCollection(name, options)
1 db.createCollection(name, options)
name 要创建的集合名称
options 可选参数,如下
字段
类型
描述
capped
boolean
如果为true,则创建固定集合(固定大小的集合)当达到最大值时,自动覆盖最早的文档.当capped为true,必须指定size参数
autoIndexId
boolean
为true,自动在_id字段创建索引,默认为false
size
number
为集合指定一个最大值(以字节计)
max
number
指定固定集合中包含文档的最大数量
1 2 3 4 > db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } ) { "ok" : 1 } // 创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个
查看已有的集合 show collections
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合1 2 3 4 > db.mycol2.insert({"name" : "菜鸟教程"}) > show collections mycol2 // 自动创建了mycol2集合
删除集合 db.collection.drop()
文档
插入文档 db.collection_name.insert(document)
1 2 3 4 5 6 7 8 9 10 >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: 'doyou', url: 'http://vrfe.top', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) // col是集合名,如果该集合不在数据库中,monogodb会自动创建该集合并插入文档 // 可以用insert()或者save()插入向集合中插入文档. // 如果不指定_id字段,save()和insert()类似,指定了_id,save则会更新该_id的数据
查看已插入文档 db.col.find()
1 2 db.col.find() db.col.find().pretty()
更新文档 db.collection.update() / save()
1 2 3 4 5 6 7 8 9 db.collection.update( <query>, <update>, { upsert: <boolean>, // 可选 multi: <boolean>, // 可选 writeConcern: <document> // 可选 } )
query: update的查询条件 ==> sql update查询where后面
update: update的对象和一些更新的操作符 ==> sql update set后面
upsert: 可选,如果不存在update记录,是否插入objNew, 默认是false
multi: 可选,默认false,只更新找到的第一条记录,如果为true,按条件查出多条全部记录
writeConcern: 可选,抛出异常的级别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 // 在集合col中插入如下数据 >db.col.insert({ title: 'MongoDB', description: 'MongoDB 是一个 Nosql 数据库', by: 'doyou', url: 'http://vrfe.top', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) // 使用update()来更新标题 >db.col.update({'title':'MongoDB'},{$set:{'title':'哟嚯嚯'}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息 > db.col.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "哟嚯嚯", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "doyou", "url" : "http://vrfe.top", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
以上只会修改第一条发现的文档,如果要修改多条具有相同条件的文档,设置multi为true
1 >db.col.update({'title':'MongoDB'},{$set:{'title':'哟嚯嚯'}},{multi:true})
删除文档 db.collection.remove()
1 2 3 4 5 6 7 8 9 10 11 12 13 // 2.6版本之后 db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } ) db.collection_name.remove({'title':'MongoDB'}) // 删除所有数据 db.col.remove({})
查询文档 db.collection.find(query,projection)
1 2 3 db.collection.find(query,projection) db.collection.find(query,projection).pretty() db.collection.findOne() 只返回一个文档
query: 可选, 指定查询条件
projection: 默认省略该参数
1 2 3 4 5 db.col.find({"likes":{$lt:50}}).pretty() where likes < 50 db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50 db.col.find({"likes":{$gt:50}}).pretty() where likes > 50 db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50 db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
AND 条件, 每个键值以逗号隔开,即SQL的AND条件
1 >db.col.find({key1:value1, key2:value2}).pretty()
OR条件, 使用关键字$or
1 2 3 4 5 6 7 8 9 >db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty() db.col.find({$or:[{"by":"doyou"},{"title": "MongoDB"}]}).pretty()
AND 和 OR 联合使用
where likes>50 AND (by = 'doyou' OR title = 'MongoDB')
1 db.col.find({"likes": {$gt:50}, $or: [{"by": "doyou"},{"title": "MongoDB"}]}).pretty()
条件操作符
mongodb条件操作符
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
$type操作符
查询集合col中title为String类型的数据
类型映射表 1 2 3 db.col.find({"title" : {$type : 2}}) 或 db.col.find({"title" : {$type : 'string'}})
limit()与skip()
1 db.collection_name.find().limit(number)
1 2 db.collection_name.find(query).limit(number).skip(number) // skip()方法默认参数为0
sort()方法对数据进行排序
1 2 3 4 5 db.collection_name.find().sort({key:1}) // 1 为升序排列 // -1 为降序 db.col.find({},{"title":1,_id:0}).sort({"likes":-1}) {'title':1,_id:0}表示要查询title,不查询_id字段,_id默认会查询
createIndex()创建索引
索引参数表 1 2 3 4 5 6 db.collection.createIndex(keys,options) // key值为要创建的索引字段, 1为按升序创建索引 -1位降序 > db.col.createIndex({"title":1}) // 复合索引,使用多个字段创建索引 > db.col.createIndex({"title":1,"description":-1})