mongoDB学习(二)之常用的修改操作

插入文档(插入数据库)

db.person.insert({_id:"0001",name"yuexin"})

清除数据

db.person.drop()

批量插入文档

shell中不支持批量插入

完成批量插入使用for循环

for(var i=0;i<10;i++){

.. db.persons.insert({_id:i,name:"yuexin"+i})

.. }

save操作

save操作与insert操作的区别是当id一样的时候save会变成更新操作而insert会报错

删除列表中所有数据

db.persons.remove()删除persons中的数据但是不删除索引(db.system.indexes.find()中有值)

对于

db.person.drop()会删除索引

删除带查询条件的

db.persons.remove({_id:"3"})

如果想清除一个数据量十分庞大的集合,直接删除该集合并且重新建立索引的办法要比直接用remove的效率高很多。

1.强硬的文档替换式更新操作

update更新

> db.persons.update({age:55},{name:"000"})

2.主键冲突时时候会报错并且停止更新操作

因为是强硬替换的文档和已有文档id冲突时时候会报错

3.insertOrUpdate操作

目的:查询器查询出来数据就执行更新操作,查不出来就替换操作

做法:> db.persons.update({name:"0004"},{name:"1114"},true)

4.批量更新

> db.persons.update({name:"yuexin"},{$set:{name:"text"}},false,true)

默认情况当查询器查出多条数据的时候默认就修改第一条数据。

db.[documentName].update({查询器},{修改器},false,true)

修改器:

$set 用来指定一个键值对,如果存在就进行修改,不存在就进行添加

$inc 只是使用于数字类型,他可以为指定的键对应的数字类型的数值做加减操作。

> db.persons.update({age:20},{$inc:{age:-2}})

$unset 删除指定的键

> db.persons.update({age:18},{$unset:{age:1}})

$push

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

> db.persons.insert({_id:0,name:0,book:[]})

> db.persons.find()

{ "_id" : 0, "name" : 0, "book" : [ ] }

> db.persons.update({name:0},{$push:{book:"abc"}})

> db.persons.find()

{ "_id" : 0, "book" : [ "abc" ], "name" : 0 }

> db.persons.update({name:0},{$push:{book:"abcd"}})

> db.persons.update({name:0},{$push:{book:"abcd"}})

> db.persons.find()

{ "_id" : 0, "book" : [ "abc", "abcd", "abcd" ], "name" : 0 }

2.如果指定的键不是数组,则中断当前操作

Cannot apply $push/$pushAll modifier to non-array

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

> db.persons.update({name:0},{$push:{things:"abcd"}})

> db.persons.find()

{ "_id" : 0, "book" : [ "abc", "abcd", "abcd" ], "name" : 0, "things" : [ "abcd"

] }

$pushAll 与push相似,是批量加入数组数据

> db.persons.update({name:0},{$pushAll:{things:["abcd","01","02"]}})

> db.persons.find()

{ "_id" : 0, "book" : [ "abc", "abcd", "abcd" ], "name" : 0, "things" : [ "abcd"

, "abcd", "01", "02" ] }

$addToSet 目标数组存在此项则不操作,不存在此项则加进去

> db.persons.insert({_id:0,name:0,book:[]})

> db.persons.update({name:0},{$addToSet:{book:"abcd"}})

> db.persons.find()

{ "_id" : 0, "book" : [ "abcd" ], "name" : 0 }

> db.persons.update({name:0},{$addToSet:{book:"abcd"}})

> db.persons.find()

{ "_id" : 0, "book" : [ "abcd" ], "name" : 0 }

$pop 删除第一个或者最后一个(-1为第一个,1为最后一个)

> db.persons.update({name:0},{$pop:{book:-1}})

$pull 删除指定的一个

> db.persons.update({name:0},{$pull:{book:"01"}})

$pull 删除多个

> db.persons.update({name:0},{$pullAll:{book:["01","02"]}})

$ 数组定位器,如果数组有多个数值我们只想对其中一部分进行操作我们就要用到定位器($)(??)

修改器是放在最外面的,查询器是放在内层的

$addToSet与$each结合完成批量数组更新

有的话就不添加了

> db.persons.find()

{ "_id" : 0, "book" : [ "js" ], "name" : 0 }

> db.persons.update({_id:0},{$addToSet:{book:{$each:["js","db"]}}})

> db.persons.find()

{ "_id" : 0, "book" : [ "js", "db" ], "name" : 0 }

当document被创建的时候mongoDB为其分配内存和预留内存,当修改操作不超过预留内存的时候速度非常快,反而超过了就要分配新的内存则会消耗时间

runCommand可以执行mongoDB中的特殊函数

findAndModify就是特殊函数之一他的用于是返回update或remove后的文档

> db.persons.find()

{ "_id" : 0, "book" : [ "js", "db" ], "name" : 0 }

> ps = db.runCommand({

... "findAndModify":"persons",

... "query":{name:0},

... "update":{$set:{age:100}},

... new:true})

{

"lastErrorObject" : {

"updatedExisting" : true,

"n" : 1,

"connectionId" : 1,

"err" : null,

"ok" : 1

},

"value" : {

"_id" : 0,

"age" : 100,

"book" : [

"js",

"db"

],

"name" : 0

},

"ok" : 1

}

> ps.value

{ "_id" : 0, "age" : 100, "book" : [ "js", "db" ], "name" : 0 }

时间: 2025-01-04 14:48:27

mongoDB学习(二)之常用的修改操作的相关文章

[Spring Data MongoDB]学习笔记--MongoTemplate查询操作

查询操作主要用到两个类:Query, Criteria 所有的find方法都需要一个query的object. 1. 直接通过json来查找,不过这种方式在代码中是不推荐的. BasicQuery query = new BasicQuery("{ age : { $lt : 50 }, accounts.balance : { $gt : 1000.00 }}"); List<Person> result = mongoTemplate.find(query, Perso

MongoDB学习总结(三) —— 常用聚合函数

上一篇介绍了MongoDB增删改查命令的基本用法,这一篇来学习一下MongoDB的一些基本聚合函数. 下面我们直奔主题,用简单的实例依次介绍一下. 1.count()函数 集合的count函数是最简单的聚合函数,返回集合中文档的数量. 2.distinct()函数 用于找出一个集合中,给定键的所有不同的值. 我们还可通过在数据库上运行命令,来执行distinct聚合函数,此时我们必须指定集合和键: 命令参数中,键"distinct"指定统计的集合名称,键"key"指

MongoDB学习笔记~对集合属性的操作

回到目录 $unset清除元素 请注意在单个数组元素上使用$unset的结果可能与你设想的不一样.其结果只是将元素的值设置为null,而非删除整个元素.要想彻底删除某个数组元素,可以用$pull 和$pop操作符. $addToSet和$push的区别 该两者的功能都是给数组添加一个值.但是两者之间有区别,$addToSet要添加的值如果不存在才进行添加操作,但是push只添加一个值:例如: tags = [“zzl”,”dudu”] 如果执行db.collection.update({},{$

MongoDB学习笔记~自己封装的Curd操作(查询集合对象属性,更新集合对象)

回到目录 我不得不说,mongodb官方驱动在与.net结合上做的不是很好,不是很理想,所以,我决定对它进行了二次封装,这是显得很必然了,每个人都希望使用简单的对象,而对使用复杂,麻烦,容易出错的对象尽而远之,这是正常的,人都是喜欢懒惰的,就像程序员,也是一样,喜欢偷懒,可能说,偷懒是程序员进步的一个标志,呵呵. 下面我是总结的几种标准的操作,主要是针对我封装的官方驱动而方的(MongoOfficialRepository<TEntity>) 1  插入对象和子对象 /// <summa

Mongodb(二)基本概念和操作

(一).mongodb组成 数据库.集合.文档.域.索引 SQL术语 MongoDB术语 解释/说明 database database 数据库 table collection 数据库表/集合 row document 数据记录行/文档 column field 数据字段/域 index index 索引 table joins 表连接,MongoDB不支持 primary key primary key 主键,MongoDB自动将_id字段设置为主键 1.数据库.mongodb可以建立多个数

MongoDB学习(二)

常用语句: 创建数据库:use database_name 示例:use myfisrtmongoDB shell下提示:switched to db myfisrtmongoDB 表示成功 但此时用show dbs命令任然无法查看到新创建的数据库,需要插入第一条数据后,才可以查看. 删除数据库:db.dropDatabase() 该命令是删除当前的数据库 提示:{"dropped":"myfirstmongoDB","ok":1} 插入文档:d

mongodb 学习二

基本操作 增删改查实一个数据库必备的操作,接下来我们就说说怎么在shell下进行增删改查. 我们另外打开一个"命令指示符"窗口(注意:之前的不能关闭),输入mongo打开MongoDB的shell,这个shell就是MongoDB的客户端 F:\mongodb\data\bin>mongo MongoDB shell version: 3.4.4 connecting to: test > 默认连接的数据库是"test" 增增加操作 我们来增加一个名为&

MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)

回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋一下初值,即new一下它,呵呵. 正确的mongo集合 对于赋过初值的子对象,在按需要更新时,有以下两种要注意一下 1 子对象的_id,如果已经存在,就更新它的值 2 子对象的_id,如果不存在,或者没有显示为_id赋值,则添加一条新的记录,即_id从新生成 而对于实体更新不存在这个问题,实体里的值

[Spring Data MongoDB]学习笔记--MongoTemplate插入修改操作

插入操作: 直接给个例子 import static org.springframework.data.mongodb.core.query.Criteria.where; import static org.springframework.data.mongodb.core.query.Criteria.query; … Person p = new Person("Bob", 33); mongoTemplate.insert(p);//还可以多加一个参数,来提供collectio