MongoDB学习(一)-常用操作命令

连接

语法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"}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值