mongo数据的增删改查

文档 文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

一个简单的文档例子如下:

{"site":"www.runoob.com", "name":"菜鸟教程"}

再次对比关系型数据库与非关系型数据库的相关术语: 下表列出了 RDBMS 与 MongoDB 对应的术语:

RDBMS MongoDB
数据库 数据库
表格 集合
文档
字段
表联合 嵌入文档
主键 主键 (MongoDB 提供了 key 为 _id )

MongoDB 数据类型 下表为MongoDB中常用的几种数据类型。

数据类型 描述
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean 布尔值。用于存储布尔值(真/假)。
Double 双精度浮点值。用于存储浮点值。
Array 用于将数组或列表或多个值存储为一个键。
Timestamp 时间戳。记录文档修改或添加的具体时间。
Object 用于嵌入式的文档,即一个值为一个文档
Null 用于创建空值。
Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID 对象 ID。用于创建文档的 ID。
Binary Data 二进制数据。用于存储二进制数据。

ObjectId

ObjectId 类似唯一主键,可以很快的去生成和排序

-- 每个文档都有一个属性,为_id,保证每个文档的唯一性
-- 可以自己去设置_id插入文档
-- 如果没有提供,那么MongoDB为每个文档提供了一个独特的_id,类型为objectID
-- objectID是一个12字节的十六进制数
    前4个字节为当前时间戳
    接下来3个字节的机器ID
    接下来的2个字节中MongoDB的服务进程id
    最后3个字节是简单的增量值

插入文档

1.语法

db.集合名称.insert(document)

注意:插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId

例1:

db.stu.insert({name:'郑程峰',gender:1})

例2:

db.stu.insert({_id:'20180819',name:'郑程峰2',gender:1})

多条插入:

db.stu.insert([{name:'王明',gender:1},{name:'王玲玲',gender:0}])

在3.2版本之后还提供了插入多条数据和插入单条数据的方法

db.集合名称.insertOne(document) db.集合名称.insertMany(document)

查询全部文档

语法: db.集合名称.find()

db.stu.find()

更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。两个函数是有区别的。

update() 方法

update() 方法用于更新已存在的文档

db.collection.update(
,
,
{
    upsert: ,
    multi: ,
}
)

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

例1:全文档更新

db.stu.update({name:'xxxxx'},{name:'张xxx'})

例2:指定属性更新,通过操作符$set

db.stu.insert({name:'李自成',gender:1}) db.stu.update({name:'李自成'},{$set:{name:'闯王李自成'}})

例4:修改多条匹配到的数据(跟新所有name为‘李自成’的文档的dender字段) db.stu.update({name:'李自成'},{$set:{gender:0}},{multi:true})

pretty()

该函数,将数据以格式化的方式展示 db.集合名称.find().pretty()

save() 方法

save() 方法通过传入的文档来替换已有文档,如果文档的_id已经存在则修改,如果文档的_id不存在则添加 db.集合名称.save(document) 例1

db.stu.save({_id:'20180820101010','name':'保存',gender:1})

例7

db.stu.save({_id:'20180820101010','name':'跟新'})

删除文档

语法 remove() 方法的基本语法格式如下所示:

db.collection.remove(
,
{
    justOne: ,
}
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。

例1 db.集合名称.remove(document)

例2:只删除1条,1表示是否只删除一条为true的意思 db.集合名称.remove(document,1) db.集合名称.remove(document,{justOne:true})

例3:表示删除全部 db.集合名称.remove({})

基本的数据查询

基本查询

  • 方法find():

查询

db.集合名称.find({条件文档})

方法findOne():查询,只返回第一个

db.集合名称.findOne({条件文档})

方法pretty():将结果格式化

db.集合名称.find({条件文档}).pretty()

例1:查询出姓名等于李某某的学生

db.stu.find({name:'李某某'})

比较运算符

  • 等于,默认是等于判断,没有运算符
  • 小于$lt
  • 小于或等于$lte
  • 大于$gt
  • 大于或等于$gte
  • 不等于$ne

例2:查询年龄大于或等于18的学生

db.stu.find({age:{$gte:18}})

逻辑运算符

查询时可以有多个条件,多个条件之间需要通过逻辑运算符连接
逻辑与:默认是逻辑与的关系

例3:查询年龄大于或等于18,并且性别为1的学生

db.stu.find({age:{$gte:18},gender:1})

逻辑或:使用$or 例4:查询年龄大于18,或性别为0的学生

db.stu.find({gt:18}},{gender:1}]})

and和or一起使用
例5:查询年龄大于18或性别为0的学生,并且学生的姓名为gj

db.stu.find({gte:18}},{gender:1}],name:'gj'})

范围运算符 使用"nin" 判断是否在某个范围内 例6:查询年龄为18、28的学生

db.stu.find({age:{$in:[18,28]}})

支持正则表达式

使用//或$regex编写正则表达式 例7:查询姓黄的学生

db.stu.find({name:/^黄/}) db.stu.find({name:{$regex:'^黄'}}})

自定义查询

使用$where后面写一个函数,返回满足条件的数据 例7:查询年龄大于30的学生

db.stu.find({$where:function(){return this.age>20}})

$type

想要获取某一中类型的数据 例如:如果想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:

db.col.find({"title" : {$type : 'string'}})

你可能感兴趣的:(mongo数据的增删改查)