初学mongDB入门案例
win下初学mongDB入门案例
1.准备
下载mongoBD 并安装可视化工具是学习前必须的准备
安装百度即可 :https://blog.****.net/heshushun/article/details/77776706
在这里推荐可视化工具推荐使用Robo3T 或者Navocat 其他的可视化工具也可以 依据个人习惯而言,
那么我这里就使用Navocat 展示
2.数据库以及集合的创建
MongoDB在创建数据库的时候,如果已经有了这个数据库,那么会直接打开,如果没有,那么新建,并且在,MongoDB中如果这个数据库为空数据库,理解为什么都没有的数据库,那么我们查看这个数据库的时候是不存在的,这一点我刚开始也是很难理解为什么。想下为什么 MongoDB在创建数据库的时候是用use db 来创建数据库,以及带来的效果也就好理解了。
那么举个例子:
创建数据库m1DB,创建后查看所有的数据库
use m1DB
show db
我们查看结果
这里没有 新建的数据库 因为数据库是空的
所以在学习的时候不妨这样
use m1DB //创建m1DB
db.createCollection("collection1") //创建一个 名字为 collection1 的集合
show dbs //查看所有数据库
db//查看当前数据库
我们查看结果
现在便可以看到新建的数据库了
2.插入数据insert
最基本的插入数据如下
db.表.命令({对象1:“值1”,对象2:“值2”}) //增删改查基本就这个语法
db.collection1.insert({x:1,y:"插入的第一条数据"})
db.collection1.insert({x:1,y:"插入的第二条数据"})
//当然mongoDB还支持js语法
for(let i=0;i<10;i++){
db.collection1.insert({inum:"i的值是"+i,p:"p"})
}
学过关系型的数据库的可能会问,为什么没有建立 列 就可以直接插入 而且 里面有没有这个列都可以插入,
mongoDB是关系型数据库 有疑问 去补充相关的知识,这里就不多讲了 ,对象型数据库比较任性。
那么我们查看数据库的内容
db.collection1.find()//这就是一条查询语句
学过js或者前端 的同学这种查询结果会很熟悉 当然也可以已表的形式查看 右下角点一点
是不是又很熟悉了
我们发现mongoDB会自动给我们创建一个_id的唯一主键。
我们也可以插入数组
db.collection1.insert({arr:[1,2,3,5]})
3.查询数据find
刚才我们在上面已经使用过一次查询了,查询所有。但是我们需要的是更切合实际的查询
按照条件查询:例如查询x=1的数据
db.collection1.find({x:1})
查询p=“p” ,inu=“i的值是5”的数据,查询参数与参数 之间 用 “ ,” 隔开
db.collection1.find({p:"p",inum:"i的值是5"})
筛选查询
我们先准备几条数据
for(let i=0;i<10;i++){
db.collection1.insert({x:i,y:"插入的第一条数据"})
}
然后做筛选查询 {${函数:“值”}}
db.collection1.find({x:{$gt:5}})//查询 x>5
gt(greater than)大于;
lt(less than)小于;
gte(greater then equal)大于等于;
lte(less than equal)小于等于;
ne(not equal)不等于
我们也可以查询数组中的数据
例如:
db.collection1.find({arr:{$all:[1,2]}});
{$all:[1,2]} 包含1,并且包含2
{$in:[1,2]} 包含1。或者包含2
{$nin:[1,2]} 不包含,并且不包含
{$or:[{参数:“值”},{参数:值}]} 或者
{$nor:[{参数:“值”},{参数:“值”}]} 既不包含 或者不包含
分页:
db.collection1.find({x:2}).skip(0).limit(3) //skip默认值为0 查询 x:2 的前三条数据
排序:
db.collection1.find().sort({x:-1}) //按照x反排序 1 为小到大 -1 大到小
模糊查询:
db.collection1.insert({y:"一二三四五"});
db.collection1.insert({y:"一三四五"});
db.collection1.find({y:/二/}) // 含有 "二" 字 返回所有查询结果
db.collection1.find({title:/^一/}) // 以一开头
db.collection1.find({title:/五$/}) //以五结尾
4.更新updata
更新某条数据
db.collection1.update({x:1},{x:2,y:"yyyy"})//查询该表的数据 将x为1 的数据修改为 x:2 //y:"yyyy"
//这种更新只会更新查询到的第一条数据
更新查询的所有数据,
我们多次执行 db.collection1.insert({x:1,y:“插入的第一条数据”}) 作为案例
//如果在参数的最后加上{multi:true} 将需要修改的数据用{$se:{ }} 包裹起来 则会更新所有的查询的数据
db.collection1.update({x:1},{$set:{x:2,y:"yyyy"}}, {multi:true})
//执行完更新数据我们查询以下看结果
db.collection1.find()
查询不到 添加
db.collection1.update({x:2},{$set:{x:1,y:"y222"}}, 1,1)
//表示合筛选条件的话是否全部更改,默认为0只改第一条,改为1后表示全部更改
第3个参数1表示如果没有符合条件的记录是否新增一条记录,1表示新增,0表示不新增
也可以通过save
db.collection1.save({_id:"5bcad4cf81695a1934004061",x:2,y:"111"})
使用save 最好使用唯一主键来做修改的前提条件
5.删除remove
一般来说,删除数据是不会在真正的实际开发中去使用的 而是 添加一个字段 比如hide 字段 设置 该字段的值为boolen 在查询是 我们会额外加上这个字段=true,在不需要让用户看见的时候设置为false 那么便查询不到
remove是真正的将数据从数据库给删除,可能极少使用但是还是要会
db.collection1.remove({x:1})//删除x:1 的数据
6.索引 index
提供强大的搜索功能
mongo默认为每条数据的_id字段建索引
db.collection1.ensureIndex({f:1});//为f字段建普通索引
db.collection1.dropIndex({g:1});//删除g字段的索引
db.collection1.ensureIndex({k:1},{unique:true});//为k字段建唯一索引,在为字段建了唯一索引后就不能再添加相同值的记录了
db.collection1.ensureIndex({
“article”: “text”
}) //创建全文索引 字段 article 索引名:text
例子:
db.imooc_collection.insert({
"article": "aa"
})
db.imooc_collection.insert({
"article": "aa bb cc dd ee"
})
db.imooc_collection.insert({
"article": "aa c ddada ee"
})
db.imooc_collection.insert({
"article": "aa bb cc dd ff"
})
db.imooc_collection.insert({
"article": " cc dd ee"
})
db.imooc_collection.insert({
"article": " bb aa cc aa"
})
db.imooc_collection.find({
$text: {
$search: "aa"
}
}) //包含aa
db.imooc_collection.find({
$text: {
$search: "aa bb cc"
}
})//用 空格 表示 aa 或bb 或cc
db.imooc_collection.find({
$text: {
$search: "aa bb -cc"
}
})//- 表示 aa bb 中不含cc的
db.imooc_collection.find({
$text: {
$search: " \"aa\" \"bb\" \"cc\" "
}
})//aa bb cc 都同时包含 但是 \"需要转义
//相似查询
db.imooc_collection.find({
$text: {
$search: "aa b"
}
})
db.imooc_collection.find({
$text: {
$search: "aa bb"
}
}, {
score: {
$meta: "textScore"
}
}).sort({
score: {
$meta: "textScore"
}
}) //查询相似的 并且 按照相似度 排序大到小
学习了2天mongoDB 基础的知识总结 , 后续会在帖子中更新… 学过关系型数据库的同学可能会有点难理解,包括为什么要使用mongoDB,和mysql这种主流数据库的区别,这些东西都需要去了解,才能更好的应用mongoDB,以及其他主流高效的数据库