连接
语法:mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
参数 | 说明 |
---|---|
mongodb:// | 这是固定的格式,必须要指定 |
username:password@ | 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库 |
host1 | 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址 |
portX | 可选的指定端口,如果不填,默认为27017 |
/database | 如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。 |
> mongodb://admin:123456@localhost/
> mongodb://admin:123456@localhost/test # 连接到test数据库
数据库级别
创建数据库/选择数据库
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
语法:use DATABASE_NAME
,如果数据库不存在,则创建数据库,否则切换到指定数据库。
> use admin
查看当前数据库
语法:show dbs
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
删除数据库
语法:db.dropDatabase()
,删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。
> use admin # 先切换至admin数据库
switched to db admin
> db.dropDatabase() # 删除当前数据库,即admin
{ "dropped" : "admin", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
集合级别
查看当前集合
语法:show collections
/ show tables
> show tables
users
创建集合
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
语法:db.createCollection(name, options)
> use config
switched to db config
> db.createCollection("users") # 普通方式自动创建
{ "ok" : 1 }
> show collections
users
> db.users.insert({name:"test",password:"123456"}) # 直接插入文档新建集合
删除集合
语法:db.collection_name.drop()
,如果成功删除选定集合,则 drop( ) 方法返回 true,否则返回 false。
> use config
switched to db config
> show collections
users
mycol
mycol2
> db.mycol2.drop() # 删除mycol2的集合
true
> show tables
users
mycol # 从结果中可以看出 mycol2 集合已被删除。
文档级别
插入文档
语法:
db.collection_name.insert(document)
db.collection_name.save(document)
- 如果没指定
_id
,那么save()
方法将与insert()
方法一样,自动生成_id
。如果指定_id
,则它将替换_id
所标识文档的整个数据。 db.collection_name.insertOne(document)
:向集合插入一个新文档db.collection_name.insertMany([document1,document2,...,documentN])
:向集合插入多个新文档
> db.users.insert({name: 'test', # insert()
password: '123456',
phone: '12345678901'
})
> db.users.save({_id:ObjectId("507f191e810c19729de860ea"),
name: 'test', # save()
phone: '12345678901'
})
> db.users.insertOne({_id:
name: 'test', # insertOne()
phone: '12345678901'
})
> db.users.insertMany([{_id:
name: 'test', # insertMany()
phone: '12345678901'
},{_id:
name: 'test',
phone: '12345678901'
}])
更新文档
-
update( )方法:用于更新已存在的文档
语法:
db.collection.update( <query>, /*update的查询条件,类似sql update查询内where后面的*/ <update>, /*update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的*/ { upsert: <boolean>, /*可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入*/ multi: <boolean>, /*可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。*/ writeConcern: <document> /*可选,抛出异常的级别。*/ } )
> db.users.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "name": "test", "password": "123456", "phone": "12345678901" } > db.users.update({'name':'test'},{$set:{'phone':'11111111111'}}) /*修改name为test的文档phone设为11111111111*/ WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息 > db.users.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "name": "test", "password": "123456", "phone": "11111111111" } > db.users.update({'name':'test'},{$set:{'phone':'11111111111'}},{multi:true}) /*要修改多条相同的文档,则需要设置 multi 参数为 true*/
-
save( )方法:通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入
语法:
db.collection.save( <document>, /*文档数据*/ { writeConcern: <document> /*可选,抛出异常的级别*/ } )
> db.users.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "name": "test", "password": "123456", "phone": "12345678901" } > db.users.save({ "_id" : ObjectId("56064f89ade2f21f36b03136"), /*主键存在,修改记录*/ "name": "test", "password": "123456", "phone": "11111111111" }) > db.users.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "name": "test", "password": "123456", "phone": "11111111111" }
删除文档
-
db.collection_name.remove()
语法:
db.collection.remove( <query>, /*query :(可选)删除的文档的条件*/ { justOne: <boolean>, /*justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。*/ writeConcern: <document> /*可选)抛出异常的级别。*/ } )
> db.users.find() {"_id" :ObjectId("56064f89ade2f21f36b03136"),"name":"test","password":"123456","phone":"12345678901"} {"_id" :ObjectId("56064f89ade2f21f30003131"),"name":"test","password":"654321","phone":"11111111111"} > db.uses.remove({'name':'test'}) /*删除所有匹配条件文档*/ WriteResult({ "nRemoved" : 2 }) > db.uses.remove({'name':'test'},{justOne:true}) /*删除第一条匹配条件文档*/ WriteResult({ "nRemoved" : 1 }) > db.uses.remove() /*删除全部文档*/ WriteResult({ "nRemoved" : 2 })
查询文档
-
db.collection.find(query, projection)
query
:可选,使用查询操作符指定查询条件projection
:可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
-
db.col.find().pretty()
:pretty() 方法以格式化的方式来显示所有文档。 -
db.col.findOne()
:只返回一个文档> db.users.find() {"_id" :ObjectId("56064f89ade2f21f36b03136"),"name":"test","password":"123456","phone":"12345678901"} {"_id" :ObjectId("56064f89ade2f21f30003131"),"name":"test","password":"654321","phone":"11111111111"} > db.users.find().pretty() /*pretty()格式化输出*/ { "_id" : ObjectId("56064f89ade2f21f36b03136"), "name": "test", "password": "123456", "phone": "11111111111" } { "_id" :ObjectId("56064f89ade2f21f30003131"), "name":"test", "password":"654321", "phone":"11111111111" } > db.users.findOne() /*只返回匹配的第一个文档*/ {"_id" :ObjectId("56064f89ade2f21f36b03136"),"name":"test","password":"123456","phone":"12345678901"}
条件查询
and
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
语法:db.collection_name.find({key1:value1, key2:value2})
> db.users.find({'name':'test','phone':'11111111111'})
{"_id" :ObjectId("56064f89ade2f21f30003131"),"name":"test","password":"654321","phone":"11111111111"}
or
MongoDB OR 条件语句使用了关键字 $or
语法:db.collection_name.find({$or:[{key1: value1}, {key2:value2}]})
> db.users.find({$or:[{'phone':'12345678901'},{'phone':'11111111111'}]})
{"_id" :ObjectId("56064f89ade2f21f36b03136"),"name":"test","password":"123456","phone":"12345678901"}
{"_id" :ObjectId("56064f89ade2f21f30003131"),"name":"test","password":"654321","phone":"11111111111"}
字段比较
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } | db.score.find({"name":"Lee"}) | where name = 'Lee' |
小于 | {<key>:{$lt:<value>}} | db.score.find({"score":{$lt:60}}) | where score < 60 |
小于或等于 | {<key>:{$lte:<value>}} | db.score.find({"score":{$lte:80}}) | where score <= 80 |
大于 | {<key>:{$gt:<value>}} | db.score.find({"score":{$gt:90}}) | where score > 90 |
大于或等于 | {<key>:{$gte:<value>}} | db.score.find({"score":{$gte:80}}) | where score >= 80 |
不等于 | {<key>:{$ne:<value>}} | db.score.find({"socre":{$ne:100}}) | where score != 100 |
排序
-
db.collection_name.find().sort({KEY:1})
在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
> db.socre.find()
{"_id" :ObjectId("35264f89ade2f21f09b03136"),"name":"Lee","subject":"math","score":"98"}
{"_id" :ObjectId("56064f89a082f21f300031323"),"name":"Lee","subject":"english","score":"70"}
{"_id" :ObjectId("39864f89ade2f21f09b03136"),"name":"Zhang","subject":"math","score":"88"}
{"_id" :ObjectId("56060489a082f21f300031323"),"name":"Zhang","subject":"english","score":"90"}
> db.socre.find({'name':'Lee'}).sort({'socre':-1})
{"_id" :ObjectId("35264f89ade2f21f09b03136"),"name":"Lee","subject":"math","score":"98"}
{"_id" :ObjectId("56064f89a082f21f300031323"),"name":"Lee","subject":"english","score":"70"}