目录



1.插入文档:insert

语法:​​db.collection_name.insert({<key1>:<value1>,<key2>:<value2>...})​

1.1 插入一条文档

> use fruitsdb # 数据库存在则连接,不存在,则新建;
switched to db fruitsdb
> db.fruitsInfo.insert({"name":"apple",price:10}) // 插入
WriteResult({ "nInserted" : 1 })
> db.fruitsInfo.find() // 查询集合信息
{ "_id" : ObjectId("5e45649f34694e662cebe073"), "name" : "apple", "price" : 10 }
>


(1) 此处的db为数据库名,如果在程序中往数据库插入值的话,则应该写成:fruitsdb.fruitsInfo.insert({"name":"apple",price:10})
(2) insert命令,会自动产生一个ID
(3) insert命令可以使用save命令代替。若使用save命令指定_id值,则会更新默认的_id值

> db.fruitsInfo.save({_id:9999,"name":"orange",price:8})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 9999 })

> db.fruitsInfo.find()
{ "_id" : 9999, "name" : "orange", "price" : 8 } // _id已经被自定义


1.2 插入多条文档(无序)

db.fruitsInfo.insert(
[
{
"name":"watermelon",price:3
},
{
"name":"strawberry",price:20
},
{
"name":"peach",price:8
}
]
)


注意:使用insert命令一次性插入多条文档会比一条一条的插入省时,效率较高。

1.3 插入多条文档(有序)

此处的有序是从上往下顺序执行的意思

db.fruitsInfo.insert(
[
{
_id:1,"name":"watermelon",price:3
},
{
_id:2,"name":"strawberry",price:20
},
{
_id:3,"name":"peach",price:8
}
],
{ordered:true} // true表示出错,则命令执行失败。false表示,如果其中有一条记录出错,则除了出错记录外,其他记录继续插入
)


1.4 特殊的插入:insertOne与insertMany

-- 此语句插入会报错
db.goodsInfo.insertOne(
[
{_id:120,"name":"三国演义",price:89},
{_id:121,"name":"红楼梦",price:89}
]
)

---支持多条插入
db.goodsInfo.insertMany(
[
{_id:114,"name":"三国演义",price:89},
{_id:115,"name":"红楼梦",price:89}
]
)


insertOne可以确保只插入一条文档,不允许做多文档操作。insertMany则反之。

2.查询文档:find

语法:​​db.collection_name.find()​

2.1 简单查询:db.collection_name.find()

db.collection_name.find() # collection_name为集合名字


2.2 条件查询

# 单条件查询
db.goodsInfo.find(
{"name":"三国演义"} // 此为查询条件
)

# 查询需要的字段
db.goodsInfo.find(
{"name":"三国演义"} ,
{_id:0} //此处的0或者false表示不显示字段,1或者true表示显示字段
)


2.3 查询null或不存在的字段

// 插入
db.studentInfo.insert(
[
{
_id:110,name:"Jack"
},
{
_id:111,name:"Lucy"
},
{
_id:112,name:null
},
{
_id:113
}
]
)
// 查询
db.studentInfo.find(
{
name:null
}
)
//------------输出结果------------
{ "_id" : 112, "name" : null }
{ "_id" : 113 }


// 查找的值不存在
db.studentInfo.find(
{
name:{$exists:false}
}
)
//------------输出结果------------
{ "_id" : 113 }


2.4 limit与skip方法

db.studentInfo.find().limit(2) // 返回前2行记录
db.studentInfo.find().skip(2) // 跳过前2行,从第3行开始显示


2.5 $in运算符的查询

db.studentInfo.find(
{
_id:{
$in:[110,111] // 查找_id等于110与111的文档
}
}
)


2.6 find()查询条件操作符及实例

操作符

格式

实例

与TRDB的对比

小于

{:{$lt:}}

db.studentInfo.find({age:{$lt:19}})

where age<19

小于等于

{:{$lte:}}

db.studentInfo.find({age:{$lte:19}})

where age<=19

大于

{:{$gt:}}

db.studentInfo.find({age:{$gt:19}})

where age>19

大于等于

{:{$gte:}}

db.studentInfo.find({age:{$gte:19}})

where age>=19

不等于

{:{$ne:}}

db.studentInfo.find({age:{$ne:19}})

where age!=19

and

{:,:...}

db.studentInfo.find({age:18,name:"Jack"})

where age=18 and age='Jack'

or

{$or:[{:},{:},...]}

db.studentInfo.find({$or:[{_id:110},{_id:111}]})


模糊匹配:匹配尾部

{:{$regex:/$/}}

db.studentInfo.find({name:{$regex:/ck$/}})

where name like '%ck'

模糊匹配:匹配头部

{:{$regex:/^/}}

db.studentInfo.find({name:{$regex:/^Ja/}})

where name like 'Ja%'

模糊匹配:匹配任意部分

{:{$regex://}}

db.studentInfo.find({name:{$regex:/Ja/}})

where name like '%Ja%'

2.7 区间查询

// 查询年龄大于17小于19岁的文档
db.studentInfo.find(
{
age:{$gt:17,$lt:19}
}
)


3.更新文档:update

语法:​​db.collection_name.update()​

3.1 简单修改:$set

// 插入测试文档
db.bookInfo.insert(
{
title:"武侠小说",
total:23,
detail:[
{name:"神雕侠侣",score:9.2,hitCount:888888},
{name:"笑傲江湖",score:8.8,hitCount:999999},
{name:"碧血剑",score:8.9,hitCount:1111111}
]
}
)
// 更新title
db.bookInfo.update(
{
title:"武侠小说"
},
{
$set:{title:"好看的武侠小说"}
}
)


3.2 更新数值(加法):$inc

使用$inc更新数值,做的是加法运算。以下更新语句,更新后total的值为46

db.bookInfo.update(
{
title:"好看的武侠小说"
},
{
$inc:{total:23}
}
)


3.3 更新数值(乘法):$mul

使用$mul更新数值,做的是乘法运算。以下更新语句,更新后total的值为92

db.bookInfo.update(
{
title:"好看的武侠小说"
},
{
$mul:{total:2}
}
)


3.4 修改字段名:$rename

// 修改字段名,将total修改为sum
db.bookInfo.update(
{
title:"好看的武侠小说"
},
{
$rename:{"total":"sum"}
}
)


3.5 根据最小值更新:$min

将$min给出的值与当前文档字段值进行比较,当给定值较小时,则修改当前文档值为给定值

db.bookInfo.update(
{
title:"好看的武侠小说"
},
{
$min:{total:2}
}
)


3.6 根据最小值更新:$max

将$max给出的值与当前文档字段值进行比较,当给定值较大时,则修改当前文档值为给定值

db.bookInfo.update(
{
title:"好看的武侠小说"
},
{
$max:{total:12}
}
)


3.7 删除字段:$unset


// 删除字段,删除sum字段
db.bookInfo.update(
{
title:"好看的武侠小说"
},
{
$unset:{sum:92}
}
)


3.8 修改一条文档里的数组和嵌套文档

// 插入文档数据
db.bookInfo.insert(
{
_id:100,
title:"书单1",
amount:120,
unit:"RMB",
detail:[
{name:"西游记",price:98},
{name:"三国演义",price:120}
],
overview:{shopName:"当当网",shopNum:37}
}
)
// 更新数据
db.bookInfo.update(
{
_id:100
},
{
$set:{
"detail.0":{name:"红楼梦",price:130}, // 更新detail数组的第一个元素
"overview.shopName":"京东商城" // 更新嵌套文档
}

}
)


注意:引用嵌套文档对象或数组的时候,需要加""号,如:​​"detail.0"​​,​​"overview.shopName"​

3.8 多文档修改:multi

// 插入多文档
db.custInfo.insert(
[
{name:"张三",age:18,address:"China"},
{name:"李四",age:19,address:"China"},
{name:"王五",age:17,address:"China"},
{name:"Jack",age:16,address:"America"},
{name:"Tom",age:12,address:"America"}
]
)
// 更新address为China的记录,将值修改为:云南

// 不添加参数multi,只会更新一条文档
db.custInfo.update(
{address:"China"},{$set:{address:"云南"}}
)
// 添加参数multi,更新多条文档
db.custInfo.update(
{address:"China"},{$set:{address:"云南"}},{multi:true}
)


3.9 简化修改命令:updateOne(),updateMany(),replaceOne()

​updateOne()​​:修改一条文档,与update()的区别是少了multi: 选项

​updateMany()​​:修改多条文档,与update()的区别是少了multi: 选项

​replaceOne()​​:与update()的区别是有2处,一是没有multi: 选项,二是在第二个参数没有更新操作

// replaceOne 操作案例(谨慎使用)
db.custInfo.replaceOne(
{
name:"李四"
},
{
age:56
}
)


注意:使用replaceOne对文档进行操作的时候,如果类似上述操作,则会直接将原有文档除_id外的字段全部替换给定字段,具体案例如下图:

【MongoDB】基本命令_数组

4.删除文档:remove

4.1 删除文档中所有记录:db.collection_name.remove()

// 插入数据
db.custInfo.insertMany(
[
{name:"Jack",age:18},
{name:"Marry",age:19}
]
)
// 删除
db.custInfo.remove({})


若要删除整个集合,可以使用​​db.custInfo.drop()​​删除,此方法效率更高,并且会把整个集合和索引一起删除。

4.2 删除符合条件的记录

// 插入数据
db.custInfo.insertMany(
[
{name:"Jack",age:18},
{name:"Marry",age:19}
]
)
// 删除
db.custInfo.remove({age:{$gt:18}})


如果需要删除满足条件的单条记录,则添加​​justOne​​选项,案例如下:

// 插入数据
db.custInfo.insertMany(
[
{name:"Jack",age:18},
{name:"Marry",age:19},
{name:"Marry",age:20}
]
)
// 删除
db.custInfo.remove(
{age:{$gt:18}},
{justOne:true}
)


作者:奔跑的金鱼