Mongodb学习笔记(一)

基础命令篇

本篇笔记中
集合 = 表
文档 = 行
对象= 健
属性 = 值

(一)插入文档

(1)db.collection.insert({})
#插入一个或多个文档

> db.test.insert({
 		_id:1,name:'zbj',
 		age:18,
 		addres:'zhu'
 })
WriteResult({ "nInserted" : 1 })  ##插入一个或多个文档

(2)db.collection.insertOne({})
#同时填入多个文档时只会插入第一个文档

(3)db.collection.insertMany( [ { },{ } ] )
#只允许插入多个文档

> db.test.insertMany([{
	   "_id" : 2,
	   "name" : "zbj",
	   "age" : 18,
	   "addres" : "zhu" },
	   { "_id" : 4,
	   "name" : "zbj",
 	   "age" : 18,
 	   "addres" : "zhu"}
 ])

(4)定义变量

> document=({title: 'MongoDB', 
    by: 'cc',
    url: 'www',
    tags: ['mongodb', 'database', 'NoSQL'],
});

(5)再执行插入操作

db.test.insert(document)

(二)查询文档

(1)db.collection.find()
#默认查找所有文档
注意:find()返回的是一个数组,即可以按索引查找

db.test.find()[0]

db.collection.find( {条件1,条件2 } )
#条件查询(且)

db.collection.find( {key:{$in:[条件值1,条件值2] }} )
#条件查询(或), $in(包含), $nin(不包含)

db.collection.find( [{$or:{key1:value},{key2:value}}])
#条件查询(或) , $and且


(2)db.collection.findOne()
#查询符合条件的第一个文档
注意:返回的是文档对象


(3)db.collection.find( { } ).函数
skip()跳过指定数量数据
lilmit()限制每页显示的条数
在这里插入图片描述
,。

db.collection.find( { } ).count()   #文档数
db.collection.find( { } ).length()   #同上
db.qq1.find().skip(10).limit(10)  #跳过前十条查询接下来的十条
条件查询语句

如查找num大于200,小于300的文档

 db.test.find({num:{$gt:200,$lt:300}});

如

(三)修改文档

(1)db.collection.update( { 查询对象和属性 } ,{ 替换对象和属性})
#后者的文档,会替换前者查询到的文档所有内容
只对查询到的第一个文档有用

db.test.update({
    _id:'1'},
    {name:'5',
    home:'2'
    })

(2)db.collection.save( { 替换内容})
#替换集合中所有内容

(3)db.test.replaceOne({name:“cgp”},{name:“cgp240”})
db.test.replaceMany({name:“cgp”},{name:“cgp240”})
替换指定内容


修改指定对象或属性,使用“修改操作符”:

(1)$set
注意如果指定对象不存在,将添加新对象,update()默认只修改匹配的第一个文档,同时修改多个需要updateMany()

db.test.update({
    查询对象},
    {$set{  
    指定对象替换
 	}})   #不能用于添加属性

#删除指定对象$unset

db.test.update({
    查询对象},
    {$unset{  
    指定对象
 	}})

(2)$push:可添加
$addToset:不添加已有属性
向数组中添加属性

>{ "_id" : ObjectId("5e8d7a48315dd25b1a6d92c5"),
 "name" :{ "test" : [ 1, 2, 3, 4] },
 "home" : "湖南" }

>db.test.update({
	home:"湖南"},
	{$push:{"name.test":5
	}})
(3)Mongodb的文档属性可以是一个文档

当文档的属性是一个文档时,这个文档叫内嵌文档

 db.test.update({
 	name:"240"},
 	{$set:{name:{"ming":"陈哥"}
 	}});

内嵌文档查询方式:db.xxx.find({“第一对象.第二对象”:“属性”})

db.test.find({"name.ming":"陈哥"})

(四)删除文档

db.collection.remove({ })
#默认删除符合条件的所有文档


db.collection.remove({ },true)
#删除符合条件的第一个文档


db.collection.deleteOne({ })
#删除符合条件的第一个文档


db.collection.deleteMany({ })
#删除符合条件的所有文档


清空集合

db.collection.drop()

(五)文档间关系

MongoDB 的关系表示多个文档之间在逻辑上的相互联系。

文档间可以通过嵌入和引用来建立联系。

MongoDB 中的关系可以是:

1:1 (1对1)
1: N (1对多)
N: 1 (多对1)
N: N (多对多)

一对多中的引用关系举例
(引用式关系是设计数据库时经常用到的方法,这种方法把用户数据文档和用户地址数据文档分开,通过引用文档的 id 字段来建立关系。)

>db.user.insert({
>_id:1,username:"swk"},{_id:2,username:"zbj"})

>db.dd.insert({
>list:["apple","banana"],userid:1})

>var userid=db.user.findOne({username:"swk"})._id;
>db.dd.find({userid:userid})
{ "_id" : ObjectId("5e93e099ddfd999c7e17b8bb"), 
"list" : [ "apple", "banana" ], "userid" : 1 }

/*这种方法需要两次查询,第一次查询用户地址的对象id(ObjectId),
第二次通过查询的id获取用户的详细信息。*/
/*注意这一句中的 findOne 不能写成 find,
因为 find 返回的数据类型是数组,
findOne 返回的数据类型是对象*/

多对多引用关系举例

>db.teac.insert({
>_id:1,name:"语文老师"},{_id:2,name:"数学老师"})

>db.student.insert([{
>name:"陈同学",teach_id:[1,2]},
>{name:"肖同学",teach_id:[1,2]}])

>var teach_id=db.teach.findOne({name:"数学老师"})._id;
>db.student.find({teach_id:teach_id})
{ "_id" : ObjectId("5e93e891ddfd999c7e17b8bc"), "name" : "陈同学", "teach_id" : [ 1, 2 ] }
{ "_id" : ObjectId("5e93e891ddfd999c7e17b8bd"), "name" : "肖同学", "teach_id" : [ 1, 2 ] }

(六)基础知识补充

1.sort()

可用来指定文档的排序规则,1表示升序,-1表示降序

>db.value.find({}).sort({"年龄":1,"身高":-1})
//表示按年龄大小升序排列,如果年龄相同,按身高降序排列

2.投影

mongodb投影意义是根据情况显示只需要的数据。如果一个文档有10个字段,只需要显示1个,只从中选择1个字段。

在MongoDB中,当执行find()方法,那么它会显示一个文档的所有字段。要限制这一点,需要设置字段列表值为1或0。1是用来显示字段,而0被用来隐藏字段。

语法
find()方法的基本语法如下

>db.COLLECTION_NAME.find({},{KEY:1})

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值