MongoDB的基本语法

发布时间:2023年12月28日


使用用户名和密码连接登录到默认数据库

1、使用默认的服务器和账号登录
mongo
2、设置管理员
use admin
db.createUser({user: "admin",pwd: "password",roles: [ { role: "root", db: "admin" } ]});
3、使用自定义的账号密码登录其他的服务器
 mongo --port 27017 -u admin -p password --authenticationDatabase admin
4、查看所有数据库
//查看所有的库
show dbs

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库,别乱动。
?admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
?local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
?config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
5、创建数据库
//创建、切换库
use dbname
//如果数据库不存在,则创建数据库,否则切换到指定数据库。
//在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

//eg:
use myschool;创建或切换myschool
6、查看当前的数据库
db
//通过 db 来查看当前使用的数据库
7、删除数据库
//删除库 db-->this
db.dropDatabase()

//说明:db相当于Java中的this,就指代当前的Database;可以理解为java中的方法调用
8、创建集合
db.createCollection(“集合名”)

//eg
db.createCollection("teacher")
db.createCollection("student")
db.createCollection("imp")
9、查看集合
//查看库中的集合(两种都可以)
show collections
show tables

//注:
	只有库中有数据,库才能被查到,如果没有数据,是看不到库的。
10、删除集合
//删除集合
db.集合名.drop()
11、MongoDB数据类型

在这里插入图片描述

shell默认使用64位浮点型数值。 (“x”:3.14)或(“x”:3}。

对于整型值,可以使用NumberInt(4 字节符号整数) 或NumberLong(8字节符号整数), {“x”:NumberInt(“3"”) }{“x”:NumberLong(“3"”)}

12、插入数据

? 插入的数据被称为文档,文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式,BSON是一种类似于JSON的二进制形式的存储格式,是Binary JSON的简称。

db.集合名.insert(document)

eg:
db.student.insert({'name':'zhangsan','age':18})
db.student.insert({'name':'lisi','car':'沃尔沃'})
db.student.insert({'sex':'男','gf':{'name':'wangwu','age':80}})
db.student.insert({'name':'zhaoliu','dogs':['二哈','金毛','谢逊','拉布拉多']})
db.student.insert({'ren':[{'nan':'男人','nv':'女人'},{'yel':'黄种人','bl':'黑种人','wi':'白种人'}]})

13、修改数据
db.集合名。update({查询条件}{¥set:{更新内容}}{
		upsert:<boolean>,
		multi:<boolean>,
	}
)

注:
	upsert:默认为false,如果查询不到数据,则把新输入插入到集合中
	multi:默认为false,默认只改一条,true,更改多条

eg:
//修改
db.student.update({'name':'zhangsan'},{$set:{'age':20}})

//upsert设置为true;如果匹配到条件则进行修改,匹配不到则进行添加
db.student.update({'name':'zhangsansan'},{$set:{'age':21}},{upsert:true})

//multi设置为true;对所有符合条件的都进行修改,再次执行将不再进行修改以节省io所造成的资源浪费
db.student.update({'name':'zhangsan'},{$set:{'age':100}},{multi:true})


如果想实现在原有的基础上进行递增1可以使用$inc运算,好处就是减少IO操作,从而节省资源。
如果是正数就是增长,如果是负数就是减少
db.集合名.update({查询条件}{$inc:{字段名:NumerInt(1)}})

eg:
db.student.update({'name':'zhangsan'},{$inc:{'age':10}})
14、删除文档
db.集合名称.remove(
    <query>,
    {
    	justOne: <boolean>
    }
)

eg:
//删除文档
//justOne就只删除遇到的第一条文档
db.student.remove({'name':'zhangsan'},{justOne:true})
//不加justOne就删除所有匹配到的文档
db.student.remove({'name':'zhangsan'})
//不写条件就把集合中的文档全删除
db.student.remove({})
15、查询文档
db.collection.find()
find()以非结构化的方式来显示所有的文档

eg:
//全查询
db.student.find()

pretty()方法以格式化的方式显示所有文档,linux下有用。
db.col.find().pretty()

条件查询

操作格式范例RDBMS中的类似语句
等于{:}db.col.find({“by”:“张三丰”}).pretty()where by =‘张三丰’
小于{:{$lt:}}db.col.find({“likes”:{“likes”:{$lt:50}}).pretty()where likes < 50
小于等于{:{$lte:}}db.col.find({“likes”:{“likes”:{$lte:50}}).pretty()where likes <= 50
大于{:{$gt:}}db.col.find({“likes”:{“likes”:{$gt:50}}).pretty()where likes > 50
大于等于{:{$gte:}}db.col.find({“likes”:{“likes”:{$gte:50}}).pretty()where likes >= 50
不等于{:{$ne:}}db.col.find({“likes”:{“likes”:{$ne:50}}).pretty()where likes != 50
eg:
//条件查询
db.student.find({'age':8})
db.student.find({'age':{$lt:50}})
db.student.find({'age':{$gt:50}})
db.student.find({'age':{$lte:50}})
db.student.find({'age':{$gte:50}})
db.student.find({'age':{$ne:50}})

//查询没有性别的人
//exists设置为false就是查询该字段不存在
db.student.find({'sex':{$exists:false}})
16、条件查询

1、and查询

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开, 即常规 SQL 的 AND 条件。

db.col.find({key1:value1, key2:value2})

注:类似于 WHERE 语句:WHERE key1=‘value1’ AND key2=‘value2'
	
eg:
//多条件and查询
db.student.find({'age':{$lt:40},'sex':false})

2、or条件查询

db.col.find(
    {
        $or: [
        	{key1: value1}, {key2:value2}
        ]
    }
)

eg:
//多条件or查询
db.student.find({
    $or:[
        {'age':{$lt:30}},
        {'sex':true}
    ]
})

3、and和or的联合使用

db.col.find({“key1": {$gt:value1}, $or: [{“key2": “value2"},{“key3": “value3"}]})

//类似常规 SQL 语句为: ‘where key1>value1 AND (key2 = value2 OR key3 = value3)

col"集合中 “key" 大于100,小于 200 的数据
db.col.find({“key” : {$lt :200, $gt : 100}})
//相当于RDBMS:Select * from col where key>100 AND key<200;

eg:
//年龄必须小于50岁,如果姓名为张三性别可以为false,否则必须为true
db.student.find({'age':{$lte:50},$or:[{'sex':false},{'name':'张三'}]})

//范围查找年龄大于20小于50
db.student.find({'age':{$gt:20,$lt:50}})

4、模糊查询

//查询 name 包含“小"字的文档:
db.col.find({“name”://})
//查询 name 字段以“小"字开头的文档:
db.col.find({“name”:/^小/})
//查询 name字段以“小"字结尾的文档:
db.col.find({“name”:/小$/})

eg:
//包含张的姓名
db.student.find({'name'://})

//张开头的姓名
db.student.find({'name':/^张/})

//张结尾的姓名
db.student.find({'name':/张$/})
17、分页查询
//显示从头开始的多少行数据
db.col.find().limit(number)
//需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

eg:
//显示前条数据
db.student.find().limit(3)

//显示跳过多少行数据显示多少行数据
db.col.find().limit(number).skip(number)
//除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

//跳过前四个显示三个
db.student.find().limit(3).skip(4);
18、统计个数
//统计集合中一共有多少文档
db.col.count()

eg:
//统计次数
db.student.count()


//统计条件查询的结果
db.col.count({key:value})

eg:
//统计条件查询次数
db.student.count({'name':'张三'})
19、排序
db.col.find().sort()

//在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

eg:
db.student.find().sort({'age':1})
20、索引

1、查看索引

db.collection.getIndexes()

2、创建索引

db.collection.createIndex(keys,option)

eg:
//创佳索引
db.student.createIndex({'age':1})

3、删除索引

db.collection.dropIndex(index)

eg:
//删除索引
db.student.dropIndex({'age':1})

四、Java操纵MongoDB

文章来源:https://blog.csdn.net/LIJINGPO/article/details/135184077
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。