基础命令篇
本篇笔记中
集合 = 表
文档 = 行
对象= 健
属性 = 值
(一)插入文档
(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})