欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MongoDB学习(操作集合中的文档)

程序员文章站 2022-06-19 21:54:45
mongodb对集合文档的操作,添加文档、查看文档、删除文档、更新文档及常用的局部更新运算符 ......

文档概念

  文档的数据结构和json基本一样。

  所有存储在集合中的数据都是bson格式。

  bson是一种类json的一种二进制形式的存储格式,简称binary json。

 

插入文档

insert()方法

  要将数据插入到 mongodb 集合中,可以使用 insert() 方法。

db.collection_name.insert(document)

  MongoDB学习(操作集合中的文档)

  其中test为集合名。如果数据库中不存在集合,则mongodb将创建此集合,并将文档插入到该集合中。

  在插入的文档中,如果不指定 _id 参数,mongodb会为此文档分配一个唯一的object_id。

  _id 为集合中的每一个文档的12个字节的十六进制数。12 字节划分为:

id: objectid( 4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)

 

  要在单个语句中插入多个文档,可以在 insert() 命令中传递文档数组。

1 > db.test.insert([
2 ... {name:"uzi",
3 ... like:["mongodb","java","database"],
4 ... },
5 ... {name:"957",
6 ... parents:[{
7 ... father:"letme",
8 ... mather:"mlxg"}],}])

MongoDB学习(操作集合中的文档)

MongoDB学习(操作集合中的文档)

save()方法

  要插入文档,也可以使用 db.collection_name.save() 方法。与 insert() 方法不同的是,当输入的id值相同时, insert() 方法无法插入,但 save() 方法会更新包含 该 id 值的文档的全部数据。

insertone()方法

  db.collection_name.insertone() 方法将单个文档插入到集合中。如果没有指定 _id ,mongodb会自动将添加。

  该方法会返回包含新插入的文档的 ”_id"字段值的文档。

MongoDB学习(操作集合中的文档)

insertmany()方法

  db.collection_name.insertmany() 方法可以将多个文档插入到集合中。如果没有指定 _id,则自动添加objectid

MongoDB学习(操作集合中的文档)

更新文档

更新运算符

  在mongodb中进行更新操作时,可以使用运算符进行文档数据的局部修改。

运算符 描述 语法
$set 更新字段的值,如果字段不存在则进行添加 { $set : { field : value } }
$inc 

将字段值增加指定的量

{ $inc : { field : value } }

$rename

重命名字段名(键名)

{ $rename : { field : value } }

$unset

删除指定的字段(键)

 { $unset : { field : "1" } }
$setoninsert

在更新操作中新建文档时设置字段的值

{ $setoninsert : { field : value } }
$addtoset

在已有数组中添加元素,如果元素存在则不操作

{ $addtoset : { field : value } }
$pop

删除数组的第一个或最后一个元素。如果值为“-1",则删除第一个元素;

如果值为”1",则删除最后一个元素。

{ $pop : { field : value } }
$push

1.如果指定的键是数组则追加新的值;

2.如果指定的键不是数组则无法成功执行

3.如果不存在指定的字段(键)则创建数组类型的键值对

{ $push : { field : value } }
$pushall

用法与 $push 类似,一次可以添加多个值到数组

{ $pushall : { field : [ value1,value2,...] } }
$pull

从数组中删除指定值

{ $pull : { field : value } }
$pullall

从数组中删除多个值,要删除的值是以数组指定的

{ $pullall : { field : [ value1,value2,...] } }
$each

用于运算符$push和$addtoset 的限定符,用于在数组中添加多个单独的元素,防止直接添加进数组元素

 field : { $each : [ value1,...] }
$slice

用于运算符 $push 的限定符,用于限制更新后的数组长度

field : { $slice : < num > }
$sort

用于运算符 $push 的限定符,用于将数组中的文档重新排序

 
$bit

对整数值执行按位与和或运算。

 

更新方法 update()

  collection 对象的 update() 方法可以更新集合中的文档。

    db.collection.update(    
        <query>, 
        <update>, 
        {       
            upsert: <boolean>,   
            multi: <boolean>,  
            writeconcern: <document>
        }
    )

   参数说明:

  •   query:查询条件,类似sql update查询内where后面的条件。
  •   update:要更新的内容和一些更新的操作符(如 $set...)等,类似sql update查询内set后面的参数。
  •   upsert:可选。参数upsert是个布尔值,如果为 true 且没有文档与查询匹配,则插入一个新文档;如果为 false 则不插入。 默认为 false。
  •   multi:可选。mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来的多条记录全部更新。
  •   writeconcern:可选。抛出异常的级别。

  注意:如果不使用运算符,则update内容不会进行局部修改,而是全局修改。

  示例:

    MongoDB学习(操作集合中的文档)

 1 #将name为uzi的学生的age加5
 2 db.student.update({name:"uzi"},{$inc:{age:5}})
 3 
 4 #把uzi的sex改为boy
 5 db.student.update({name:"uzi"},{$set:{sex:"boy"}})
 6 
 7 #把uzi的like字段删除
 8 db.student.update({name:"uzi"},{$unset:{like:1}})
 9 
10 #给uzi的添加别名dog
11 db.student.update({name:"uzi"},{$push:{aname:"dog"}})
12 
13 #给uzi添加多个别名
14 db.student.update({name:"uzi"},{$pushall:{aname:["a1","a2"]}})
15 
16 #给uzi的别名数组里再添加一个数组
17 db.student.update({name:"uzi‘},{$addtoset:{aname:["a3","a4"]}})
18 
19 #删除别名数组内第一个别名
20 db.student.update({name:"uzi"},{$pop:{aname:-1}})
21 
22 #删除别名 a2
23 db.student.update({name:"uzi"},{$pull:{aname:"a2"}})

save() 方法

  save() 方法通过传入的文档来替换已有文档。语法格式如下:

    db.collection.save(    
        <document>,     
        {      
            writeconcern: <document> 
        }  
    )  
  •   document:文档数据
  •   writeconcern:可选。抛出的异常级别。

  无需指定query和update对象,直接将新文档替换掉原来的旧文档。它通过文档中的_id字段确定要修改的字段。

  如果集合中没有与传入文档的_id字段值相等的文档,则会添加新的文档。

  save() 函数的执行效率要低于update()。

MongoDB学习(操作集合中的文档)

 

查看文档

  查看集合中的文档,可以使用find()方法。

  db.collection_name.find() 可以以非结构化的方式显示集合中的所有文档。

  db.collection_name.find().pretty() 可以以结构化的方式显示集合中的所有文档。

MongoDB学习(操作集合中的文档)

 

删除文档

  remove()函数可以用来删除集合中的文档。

    db.collection_name.remove(     
        <query>,     
        {       
            justone: <boolean>,
            writeconcern: <document> 
        } 
    )
  •   query:可选。删除的文档的条件。
  •   justone:可选。如果为true 或 1,则只删除一个文档。默认为false。
  •   writeconcern:可选。抛出异常的级别。

  示例:

MongoDB学习(操作集合中的文档)

MongoDB学习(操作集合中的文档)

  注意:如果要删除集合中的全部文档,可以使用

db.collection_name.remove({})