2.2-MongoDB(非关系型数据库)-增删改查

开启MongoDB基础操作:

(1)首先打开两个cmd,

(2)第一个cmd先启动服务器mongod --path D:\data\db –port 20717,

(3)第二个cmd再连接服务器mongo,出现>,连接成功!

则在该cmd窗口(第二个cmd)进行操作

1、MongoDB_插入文档    

db.<collection>.insert()  向集合中插入一个或多个文档

插入一个:  db.stus.insert({name:"xk",age:25,gender:"boy"})

插入多个:  db.stus.insert([{name:"xk1",age:251,gender:"boy1"},{name:"xk2",age:252,gender:"boy2"}])    列表里面套集合

c4da1f07f36f3eb214e234ee67ccf03edc1.jpg【此时显示集合中的文档】

注:当向集合中插入文档时,若没有指定_id属性,则数据库会自动为文档添加_id属性,该属性用来作为文档的唯一标识

         _id可以自己指定,若我们制定了数据库就不会再添加了,但自己指定_id 也必须确保它的一致性   【通常不自己指定】

自己指定 _id插入数据  db.stus.insert({_id:"hello",name:"xk3",age:253,gender:"boy3"})  

ab8ad80dfd2eb4e59f8428a79137607c273.jpg

细分:

db.<collection>.insertOne()   向集合中插入一个文档

db.<collection>.insertMany()  向集合中插入多个文档

2、MongoDB_查询文档

db.<collection>.find()     find()用来查询集合中所有符合条件的文档      find()可以接收一个对象作为条件参数

db.<collection>.find() 和db.<collection>.find({ })  表示查询集合中所有的文档    {属性:值}  查询属性是指定值的文档

5bfec4707fbe6e4533b1a4a4d7ae3ff3e46.jpg【找出_id为”hello”的文档】

32dadc527c78b15d188b5046617c8218f4a.jpg【下面一个是“并列关系”】

find()返回的是一个数组     db.<collection>.find({ }).count()  查询所有结果的数量

db.<collection>.findOne()   用来查询集合中符合条件的第一个文档   findOne()返回的是一个文档对象

47ad3b5df4986a6f8fd50fc875e0d285326.jpg【文档对象可以直接拿到属性值】

3、MongoDB_修改文档   

db.<collection>.update(查询条件,新对象)   update()默认情况下会使用新对象来替换旧对象

3f048b1f91560cbccbd8d22188d84dff74a.jpg【这种有风险】

db.<collection>.update(查询条件,{$set:{修改条件}})  这种只会修改“修改条件”中出现的属性,不会进行替换

1364ad7df44259588e53562e1d2ec9f4574.jpg【这种没有风险】

使用$unset来删除文档中指定的属性

30fea8cb02eaaef11a4c59d3958fa232ad4.jpg

注:update默认只修改一个,相当于下述的updateOne()

db.<collection>.updateMany()     同时修改多个符合条件的文档

db.<collection>.updateOne()       修改一个符合条件的文档         

db.<collection>.replaceOne()  【共患难同伴】

4、MongoDB_删除文档

db<collection>.remove()        可以删除一个或多个    很久条件来删除文档,传递条件的方式和find()一样

remove() 会删除符合条件的所有文档,有几个删几个,若第二个参数传递一个true,则只会删除一个

db.<collection>.deleteOne()只能删除一个       db.<collection>.deleteMany()删除多个

b69f0b83d8407f4ad09934e682009ce31a1.jpg    

c3bae33b51ad08888ffafd5819a854aab20.jpg

ffed7adf315d1bcb6125d9b8656d22ae200.jpg 

db.<collection>.remove({ }) 清空集合

db.<collection>.drop()   删除集合              

db.dropDatabase()   删除数据库

【注:一般数据库中的数据都不会删除,所以删除的方法很少调用】

【一般都会在数据中添加一个属性,来表示数据是否被删除】【所以查找的时候,一般都是按条件查找】

5、练习1(简单)

(1)向username为sunwukong的文档中,添加hobby:{cities:[“beijing”,”shanghai”,”shenzhen”],movies:[“sanguo”,”hero”]}

cc6ca9e879b52e28da730526fb672beb4ff.jpg

发现:MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是一个文档时,我们称这个文档为:内嵌文档

(2)查询喜欢hero的文档  使用:db.users.find({hobby.movies:”hero”})

2057fbfaaa3825627a178a67e9dc2f0a34f.jpg

发现:MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过.的形式来匹配

           如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号

(3)向username为sunwukong中添加一个新电影shuihu

466f6f26bb664992522c2b77f4e1ae25a51.jpg

发现:$push向数组中添加一个新的元素  【可以重复】     $addToSet向数组中添加一个新的元素  【不可以重复】

(4)删除喜欢beijing的用户

39329db8c559e99b1e8f2f1efaf6233845a.jpg【对于内嵌文档的使用:属性需要使用引号“”】

6、练习(中)

(1)考虑效率:向numbers中插入20000条数据   

675198e0f6665834337734554e35b974e62.jpg花费7.2s      

56fc251e63f7e1dc4e5f88fc726f705dabe.jpg清空集合,重新提高效率

提高效率:0707faa337dc318a6631a9badddad2cf48a.jpg花费0.4s

(2)查询numbers中num为500的文档    db.numbers.find({num:500})

(3)查询numbers中num大于5000的文档  db.numbers.find({num:{$gt:5000}})

(4)查询numbers中num小于30的文档   db.numbers.find({num:{$lt:30}})

(5)查询numbers中num大于40小于50的文档  db.numbers.find({num:{$gt:40,$lt:50}})

(6)查询numbers集合中的前10条数据  db.numbers.find().limit(10)

本数据的特点可以使用:  db.numbers.find({num:{$lte:10}})

(7)查询numbers集合中的第11条到20条数据   db.numbers.find().skip(10).limit(10)       注:skip()用于跳过指定数量的数据

7、练习(难)    文档之间的关系  【用的最多的是“一对多”】

(1)一对一(one to one)

         比如:夫妻(一个丈夫 对应 一个妻子)    在MongoDB中可以通过内嵌文档的形式来体现一对一的关系,如下:

db.WifeandHusband.insert([{name:"潘金莲",husband:{name:"武大郎"}},{name:"黄蓉",husband:{name:"郭靖"}}])])

a40ee9138e97a99279bdcfd8e6b990e8f89.jpg

(2)一对多(one to many)/多对一(many to one)

         比如:父母-孩子   用户-订单       也可以通过内嵌文档的形式来映射一对多的关系,如下(用户-订单):

         cdd9e3723e4c42f78b63afe2bd2e709bcfe.jpg

查找用户swk的订单:

  • 首先找到swk的_id,将其赋值为user_id       var user_id=db.users.findOne({username:"swk"})._id
  • 根据user_id查找相应的订单                  db.orders.find({user_id:user_id})

(3)多对多(many to many)

         比如:分类-商品  老师-学生    也可以通过内嵌文档的形式来映射一对多的关系,如下(老师-学生):

1504124479b6235117b18584f8c9dfee038.jpg

0ba78819df25a8aed7d5265181a4f79366e.jpg

c9a0410f2bb80b3c254231f598594f57762.jpg【两个学生】

db.stus.find()   查询结果为:f6ba970e14f84b76f1e994e4b1f6be2615d.jpg

转载于:https://my.oschina.net/pansy0425/blog/3073624

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值