mongodb(二)–常用操作

mongodb(二)–常用操作

一、简介

这一节将对mongodb中语句的执行进行介绍,包含mongdb的数据类型、语句执行的方式和常用增删改查操作。mongodb自带javascript shell,其是一个javascript解释器,可以运行任何javascript语句。

二、数据类型

2.1 基本数据类型

类型参考官网地址:https://docs.mongodb.com/manual/reference/operator/query/type/index.html
mongodb中常用数据类型有:

数据类型描述示例
null (Null)空值{ “address” : null}
bool (Boolean)布尔型,true或false{ “excellent” : true}
string (String)字符串{ “stuId” : “002”}
int (Integer)整型,32位或64位,取决于服务器{ “age” : 18 }
double双精度浮点数{ “score” : 99.9 }
date (Date)日期{ “createTime” : ISODate(“2019-07-28T03:32:22.083Z”) }
timestamp (Timestamp)时间戳{ “updateTime” : 1564318837695 }
objectId (ObjectId)_id默认类型(12字节),自动生成,由‘时间+机器+pid+计数器’构成{ “_id” : ObjectId(“5d3d5a09f7c00d6237da17ce”)}
Array数组{“hobby” : [ “football”, “basketball” ] }
object内嵌文档
binary data二进制数据
regular expression正则表达式
code代码

三、mongo语句执行方式

mongo语句的执行方式包括在shell中交互式执行、连接时直接执行和执行javascript文件。

3.1 shell中交互式执行
#连接进入shell
mongo mongodb://root:root@localhost:27017/school
#执行语句
db.stu.findOne();
3.2 连接时直接执行

使用–eval, 连接时直接执行javascript语句

mongo mongodb://root:root@localhost:27017/school --eval "db.stu.find().pretty()"
3.3 执行javascript文件

javascript文件写法有两种,一是javascript文件中只写语句,mongodb的连接放在外面;二是mongodb的连接也放在javascript文件中。

另外javascript文件的执行方式也有两种,一是在交互式shell中执行;二是连接时执行。
下面举例说明。

3.3.1 mongodb连接写在外面,javascript语句执行

编写javascript文件mongo_script_1.js

//输出stu集合中一条数据(以json方式)
printjson(db.stu.findOne());

执行mongo_script_1.js文件

#执行javascript文件,添加--quiet可直接输出结果,如:mongo mongodb://root:root@localhost:27017/school -quiet mongo_study.js
mongo mongodb://root:root@localhost:27017/school mongo_script_1.js
3.3.2 mongodb的连接也放在javascript文件中

编写javascript文件mongo_script_2.js

//创建连接
conn = new Mongo('localhost:27017');
//选择数据库
db = conn.getDB('school');
//权限验证
db.auth('root','root');
// 语句执行
printjson(db.stu.findOne());

执行mongo_script_1.js文件

mongo mongo_script_2.js
3.3.3 在交互shell中执行语句

使用load方法,可在交互shell中执行语句,如:

#连接进入shell
mongo mongodb://root:root@localhost:27017/school
#执行语句
load('mongo_script_1.js')

同时load还可用于在一个javascript文件中加载其他javascript文件,如:

//js_util.js文件
function get_date() {
    return new Date();
}

//mongo_script_1.js文件
load('js_util.js');
print(get_date());

四、数据库操作

4.1 查看数据库
#查看当前数据库
db;
#查看所有数据库
show dbs;
4.2 选择或新建(没有就新建)数据库
#选择或新建(没有就新建)数据库,如use school;
use db_name;
4.3 删除数据库
#删除数据库
db.dropDatabase;

五、集合操作

5.1 查看集合
#查看集合,也可show tables
show collections
5.2 新建集合
#新建集合,也可不先创建,插入数据时会自动创建,如:db.createCollection('stu')
db.createCollection(collection_name)
5.3 删除集合
#删除集合, 如:db.stu.drop()
db.collection.drop()

六、数据操作

为便于示例,这里创建函数mongo_exe用于执行mongodb语句。

function mongo_exe(){
    mongo mongodb://root:root@localhost:27017/school -eval "$1"
}
6.1 查看
6.1.1 普通查询
#查询一条
mongo_exe "db.stu.findOne()"
#查询一条(以格式化方式)
mongo_exe "db.stu.findOne().pretty()"
#查询所有
mongo_exe "db.stu.find()"
#分页查询所有,limit:限制个数 skip:略过个数  sort:排序(1:升序 -1:降序)
mongo_exe "db.stu.find().limit(4).skip(1).sort({'stuId':-1})"

#数组查询,  根据单个数组元素,原始数据为:{ "_id" : ObjectId("5d3d5a09f7c00d6237da17ce"), "stuId" : "011", "score" : 2, "hobby" : [ "sleep", "run", "jump" ] }
mongo_exe "db.stu.find({'hobby':'run'})"
#数组查询,根据多个数组元素满足
mongo_exe "db.stu.find({'hobby':{\$all:['run', 'jump']}})"
#数组查询,根据数组元素个数查询
mongo_exe "db.stu.find({'hobby':{\$size:3}})"
6.1.2 条件查询

常用查询条件有:
$lt:小于;
$lte:小于等于;
$gt:大于;
$gte:大于等与;
$ne:不等于;
$in:包含;
$nin:不包含;
$or:或;
$and:且;
示例如下:

#条件查询,<($lt),<=($lte),>($gt),>=($gte)
mongo_exe "db.stu.find({'age':{\$gt:17}})"
mongo_exe "db.stu.find({'age':{\$lte:18}})"
#不等于查询,$ne
mongo_exe "db.stu.find({'age':{\$ne:18}})"
#条件范围查询,$in, $nin
mongo_exe "db.stu.find({'age':{\$in:[17,18]}})"
#条件范围查询,$or
mongo_exe "db.stu.find({\$or:[{'age':17}, {'age':18}]})"
6.1.3 使用函数查询

使用函数查询速度会比较慢。

#使用函数查询,this指文档
mongo_exe "db.stu.find({'\$where':function(){
    if(this.age == 18){
        return true;
    }
    return false;
}})"

#使用函数查询,简写形式
mongo_exe "db.stu.find({'\$where':'this.age==18'})"
6.1.4 个数查询
#个数统计
mongo_exe "db.stu.count({'age':18})"
6.2 插入
#插入
mongo_exe "db.stu.insert({'stuId':'003', 'stuName':'apple3', 'age':18, 'createTime':new Date(),excellent:true, , 'score':99.9, 'address':null, 'updateTime':new Date().getTime(),hobby:['football', 'basketball'], 'teacher':{'schoolName':'No1 middle school'}})"
#批量插入
mongo_exe "db.stu.insert([{'stuId':'010'},{'stuId':'011'},{'stuId':'012'}])"
6.3 更新
6.3.1 普通更新

更新格式为:

db.collection.update(
<query>,  #查询条件
<update>,  #更新字段
{
upsert:boolean, #选填,true:不存在则插入,默认false
multi:boolean, #选填,true:更新多条记录,默认false(只更新第一条)
writeConsern:<document> #选填,抛出的异常级别
}

示例如下:

#文档替换,没有则忽略
mongo_exe "db.stu.update({'_id':ObjectId('5d3d1cde73917bf1cb6f39fd')},{'stuId':'013', 'age':19})"
#直接文档替换(使用save),_id相同则替换,否则就新建
mongo_exe "db.stu.save({'_id':ObjectId('5d3d1cde73917bf1cb6f39fd'),'stuId':'015','stuName':'apple015'})"
mongo_exe "db.stu.save({'stuId':'016','stuName':'apple016','age':17})"

#指定属性修改($set)
mongo_exe "db.stu.update({'stuId':'011'},{\$set:{'stuName':'apple012'}})"
#数值增减($inc)
mongo_exe "db.stu.update({'stuId':'011'},{\$inc:{'score':1}}, {upsert:true})"
6.3.2 数组更新
#数组修改($push),添加一个值
mongo_exe "db.stu.update({'stuId':'011'},{\$push:{'hobby':'sleep'}}, {upsert:true})"
#数组修改($push, $each),添加多个值
mongo_exe "db.stu.update({'stuId':'011'},{\$push:{'hobby':{'\$each':['run','jump']}}}, {upsert:true})"
#数组修改($addToSet),添加一个值,避免重复插入
mongo_exe "db.stu.update({'stuId':'011'},{\$addToSet:{'hobby':'run'}}, {upsert:true})"

#数组修改($pop),删除指定位置元素,堆栈结构,如1:最后进入的元素  -1:第一个元素
mongo_exe "db.stu.update({'stuId':'011'},{\$pop:{'hobby':1}})"
#数组修改($pull),删除指定元素
mongo_exe "db.stu.update({'stuId':'011'},{\$pull:{'hobby':'jump'}})"
6.3.3 删除
#删除
mongo_exe "db.stu.remove({'stuId':'010'})"

七、结尾

这里列出常用的一些操作,更多操作将在后续介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值