1.介绍:
mongodb是一种文档型非关系型数据库,也可以说是一种非结构性数据库.
每一行都是一个文档,每一个字段都是一个属性,每一行的属性和个数可能不同
MongoDB的结构主要是:
数据库–>集合–>文档–>字段
2.特点
当要删除数据时要进入数据才能删除
mongoDB的主键是ObjectId类型的,自增长.
MongoDB中的文档存储是对键值对的形式存储的,其中键是不能重复的,且键可以不使用引号引上
值的类型可以是引号中的字符串,还可以是其他类型的,或者还可以是文档类型的
3.语句
(1).添加
db.集合名.insertOne() — 添加一个 注意:这种写法只能添加一个
db.集合名.insertMany – 添加多个 注意:这种写法只能添加多个,不能添加一个
我们通常的写法是;
db.集合名.insert() — 这种写法可以添加一个,也可以添加多个
例:
db.users.insert(
{name:"lalal",age:18,sex:"男"}
)//添加一条
db.users.insert(
[
{
name:"lalal",
age:23,address:"sy"
},{
name:"nini",
hobby:"sing",
address:"bj"
}
]
)//添加两条
(2).修改:
db.collection.update(
<query>,
<update>,
{
upsert:<boolean>,
//当结果为true时,如果有数据则进行更改,如果没有符合条件的数据,则进行添加文档
multi:<boolean>,
//当结果为true时,包所有符合条件的数据进行更新,如果为false,则就将符合条件数据的第一天进行修改
writeConcern:<document>
}
)
//例:
db.user.update(
{name:"lalal"},
{age:18},//表示将名字为lalal的文档改为age:18(注意:这里更新的是整个文档(一行).而不是一个字段)
{}
);
db.user.update(
{
name:"lalal"
},{
$set:{
city:"sy"
}
//当为$set时,如果符合条件的文档有该字段,则进行更改如果符合条件的文档没有这个字段,则增加这个字段
//当为$unset时,当其他对象没有该属性时,则删除该字段,当其他对象有该属性,则清空本对象的这个字段
},{
upsert:true
}
)
(3).删除
//语法
db.集合名.remove(
<query>,//条件
{
justOne:<boolean>//为true,则删除一个 为false,则查询到的全部删除
}
)
//例:
db.user.remove(
{name:"lalal"},//条件
{justOne:false}
//这里当结果为false时,则找到多少条就删除多少条
//如果为true,就删除一条
)
(4).查询
db.集合名.find() //查询全部
db.集合名.find({},{})
//第一个大括号里的参数表示条件
//第二个大括号里的参数表示查询的字段,如果不写则表示查询全部
db.users.find({},{name:1,age:1})
//注意 第二个大括号里的数只能有两个 1 和 0
//1为显示数据 0为不显示指定字段
//且所有的数必须一致
//大括号里的数除了_id以外,要么都是1,要么都是0
//例:
db.users.find(
{
name:"lalal"
},
{
name:1,
age:1,
_id:0
}
)
//查询名字为lalal的文档,显示name和age字段,不显示_id字段
db.users.find(
{},
{
name:1,
age:1,
_id:0
}
).sort(
{
age:1,
name:1
//sort 排序 当数为1的时候,升序 当数为-1时,降序
//这里表示将文档按照年龄进行升序排列,如果年龄相同了,则按照姓名进行降序排列
}
).skip(3).limit(3)
//分页 :: skip() 表示start limit()表示pageSize
db.users.find(
{
age:30
}
) //age=30
db.users.find(
{
age:{
$gt:30
}
}
) //age>30
db.users.find(
{
age:{
$gt:30
},id:{
$lt:10
}
}
) //age>30 且 id<10
db.users.find(
{
name: {
$in: ["dagei", "xiaofei"]
}
}
)
//查旬 name in ("dafei","xiaofei")
db.users.find({
city:{
$exists:true//为true表示查询有这个字段的文档,false表示没有这个字段的文档
}
})
4.运算符
(1).逻辑运算符
db.users.find(
{
$and:[
{
age:{
$gte:28
},age{
$lte:30
}
}
]
}
)//查询28<=age<=30
db.users.find(
$or:[
{
age:{
$lt:28
},age{
$gt:30
}
}
]
) //查询age<=28 or age >= 30的文档
db.users.find(
{
$or:[
{
age:28
},{
age:30
}
]
}
) //查询 age=28 or age=30的文档
(2).正则表达式
//模糊查询
db.users.find(
{
name:{
$regex:/fei/
}
}
)//查询名字中带有fei的文档
db.users.find(
{
name:{
$regex:/fei%/
}
}
) //查询名字以fei结尾的文档
db.users.find(
{
name:{
$regex:/%fei/
}
}
)//查询名字以fei开头的文档
db.users.find(
{
name:{
$regex:/fei/i
}
}
)//查询名字中带有fei的文档,并且忽略大小写
(3).数组
//添加数组字段
db.users.updateMany(
$set:{
hobby:[]
}
)
db.users.update(
{
name:"dafei"
},{
$push:{
hobby:"java"
}
}
)//在姓名为dafei的文档的hobby数组字段中添加java值
db.users.update(
{
name:"dafei"
},{
$addToSet:{
hobby:"java"
}
}
)//在姓名为dafei的文档的hobby数组字段中添加java值
db.users.update(
{
name:"dafei"
},{
$addToSet:{
hobby:{
$each:["java","git","resful","spring","ssm"]
}
}
}
)//以数组的形式向姓名我dafei的文档的hobby数组字段中添加元素
p u s h 和 push和 push和addToSet的区别:
$push可以添加重复的数据
$addToSet:不能添加重复的数据,还可以以数组的形式添加元素,但是重复的数据仍然无法添加
db.users.update(
{
name:"dafei"
},{
$pop:{
hobby:-1 这里表示删除hobby数组字段中的第一个元素
//当为 1 时,表示删除数组中最后一个元素,当为 -1 时表示删除数组中的第一个元素
}
}
)
db.users.update(
{
name:"dafei"
},{
$pull:{
hobby:"git"//删除hobby数组中的所有git
}
}
)
db.users.update(
{
name:"dafei"
},{
$set:{
"hobby.1":"javaaaaaa"
}
}
)//将hobby数组中索引为1的元素改为javaaaaaa
db.users.update(
{
name:"dafei",
hobby:"javaaaaaa" //将hobby中的javaaaaaa作为标记
},{
$set:{
"hobby.$":"java"//hobby.$为引用标记,将标记处改为java
}
}
)