Mongodb的基本操作-数据库 集合 文档的增删改查

时间:2022-12-17 20:43:11

数据库操作:

//查看有哪些数据库

> show dbs

local  0.078GB

mydb   0.078GB

//use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么会在切换之后,第一次执行新增修改操作的时候去创建这个数据库

> use newdb

switched to db newdb

//此时还没有创建

> show dbs

local  0.078GB

mydb   0.078GB

> db.persion.insert({age:10})

WriteResult({ "nInserted" : 1 })

//数据库已经创建

> show dbs

local  0.078GB

mydb   0.078GB

newdb  0.078GB

//删除数据库

> db.dropDatabase()

{ "dropped" : "newdb", "ok" : 1 }

> show dbs

local  0.078GB

mydb   0.078GB

集合操作:

> use mydb

switched to db mydb

//查看当前数据库的所有集合 因为是新数据库所以为空

> show tables

//插入一条数据 这里会自动插入一个集合person

> db.person.insert({name:'zjf',age:30})

WriteResult({ "nInserted" : 1 })

//查看所有集合 已经有了person (system.indexes是系统产生的)

> show tables

person

system.indexes

//删除集合

> db.person.drop()

true

> show tables

system.indexes

文档插入

//使用db.collection.insert()语法

> db.person.insert({name:'zjf',age:30})

WriteResult({ "nInserted" : 1 })

> db.person.find()

{ "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

文档更新

update() 方法

update() 方法用于更新已存在的文档。语法格式如下:

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

参数说明:

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

上面udpate中的命令可以有:

$set

用来指定一个键并更新键值,若键不存在并创建。

{ $set : { field : value } }

$unset

用来删除一个键。

{ $unset : { field : 1} }

$inc

$inc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。

{ $inc : { field : value } }

$push

用法:

{ $push : { field : value } }

把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。

$pushAll

同$push,只是一次可以追加多个值到一个数组字段内。

{ $pushAll : { field : value_array } }

$pull

从数组field内删除一个等于value值。

{ $pull : { field : _value } }

$addToSet

增加一个值到数组内,而且只有当这个值不在数组内才增加。

$pop

删除数组的第一个或最后一个元素

{ $pop : { field : 1 } }

$rename

修改字段名称

{ $rename : { old_field_name : new_field_name } }

$bit

位操作,integer类型

{$bit : { field : {and : 5}}}

$each

$ each修饰符可用于$ addToSet运算符和$ push运算符。用于执行批量操作。

db.students.update(
{ name: "joe" },
{ $push: { scores: { $each: [ 90, 92, 85 ] } } }
)
$ slice
$ slice修改器在$ push操作期间限制数组元素的数量。
假如有一个这样的结构:
{ "_id" : 1, "scores" : [ 40, 50, 60 ] }
执行如下语句:
db.students.update(
{ _id: 1 },
{
$push: {
scores: {
$each: [ 80, 78, 86 ],
$slice: -5
}
}
}
)
那么结果是,执行完push之后,只留下后5条:
{ "_id" : 1, "scores" : [  50,  60,  80,  78,  86 ] }
 

> db.person.insert({name:'xhj',age:30})

WriteResult({ "nInserted" : 1 })

> db.person.insert({name:'zzj',age:30})

WriteResult({ "nInserted" : 1 })

> db.person.find()

{ "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

{ "_id" : ObjectId("592ffe972108e8e79ea902b1"), "name" : "xhj", "age" : 30 }

{ "_id" : ObjectId("592ffe972108e8e79ea902b2"), "name" : "zzj", "age" : 30 }

//更新年龄30的为31(尼玛又过了一年)

> db.person.update({age:30},{$set:{age:31}})//这里注意 如果没有$set,那么db.person.update({age:30},{age:31}),表示把所有满足age=30的文档替换为{age:31}。而不是只更改age字段。是整个文档被替换了。

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

//因为默认的参数multi 为false 所以只更新了一条

> db.person.find()

{ "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 31 }

{ "_id" : ObjectId("592ffe972108e8e79ea902b1"), "name" : "xhj", "age" : 30 }

{ "_id" : ObjectId("592ffe972108e8e79ea902b2"), "name" : "zzj", "age" : 30 }

//加上multi:true  这个就类似于关系型数据库的update

> db.person.update({age:30},{$set:{age:31}},{multi:true})

WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

> db.person.find()

{ "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 31 }

{ "_id" : ObjectId("592ffe972108e8e79ea902b1"), "name" : "xhj", "age" : 31 }

{ "_id" : ObjectId("592fff812108e8e79ea902b2"), "name" : "zzj", "age" : 31 }

//根据单个记录的save来更新 这个时候要有_id作为主键 对单条数据进行更新的时候加了单独的save方法 而不是使用update({ "_id" :ObjectId("592ffd872108e8e79ea902b0")})这种方式。是把单条数据作为一个对象来看待了。

> db.person.save({ "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 })

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.person.find()

{ "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

{ "_id" : ObjectId("592ffe972108e8e79ea902b1"), "name" : "xhj", "age" : 31 }

{ "_id" : ObjectId("592fff812108e8e79ea902b2"), "name" : "zzj", "age" : 31 }

文档删除

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

db.collection.remove(

<query>,

<justOne>

)

如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:

db.collection.remove(

<query>,

{

justOne: <boolean>,

writeConcern: <document>

}

)

参数说明:

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

> db.person.find()

{ "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

{ "_id" : ObjectId("592ffe972108e8e79ea902b1"), "name" : "xhj", "age" : 31 }

{ "_id" : ObjectId("592fff812108e8e79ea902b2"), "name" : "zzj", "age" : 31 }

> db.person.remove({age:31})

WriteResult({ "nRemoved" : 2 })

> db.person.find()

{ "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

文档查询

MongoDB 查询数据的语法格式如下:

db.collection.find(query, projection)

  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

>db.col.find().pretty()

> db.person.find({name:'zjf'})

{ "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }

更新嵌入文档

db.users.update(
{ "favorites.artist": "Pisanello" },
{
$set: { "favorites.food": "pizza", type: 0}
}
)

Mongodb的基本操作-数据库 集合 文档的增删改查的更多相关文章

  1. mongodb的学习笔记一(集合和文档的增删改查)

    1数据库的增删改查 一.增加一个数据库: use blog-----切换到指定的数据库,如果数据库不存在,则自动创建该数据库(新建的数据库,如果没有存储对应的集合,是不会显示出来的) 二.删除一个数据 ...

  2. Elasticsearch之文档的增删改查以及ik分词器

    文档的增删改查 增加文档 使用elasticsearch-head查看 修改文档 使用elasticsearch-head查看 删除文档 使用elasticsearch-head查看 查看文档的三种方 ...

  3. 分布式搜索elasticsearch 索引文档的增删改查 入门

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...

  4. head插件对elasticsearch 索引文档的增删改查

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口.  RESTful接口URL的格式: http://localhost:9200 ...

  5. Elasticsearch 索引文档的增删改查

    利用Elasticsearch-head可以在界面上(http://127.0.0.1:9100/)对索引进行增删改查 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演 ...

  6. Java对XML文档的增删改查

    JAVA增删改查XML文件   最近总是需要进行xml的相关操作. 不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作. 读取XML配置文件 首先我们需要通过Do ...

  7. mongodb对数组元素及内嵌文档进行增删改查操作&lpar;转&rpar;

    from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...

  8. MongoDB对数组元素及内嵌文档进行增删改查操作

    比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: {    "_id" : "195861",    &qu ...

  9. elasticsearch java和&lowbar;head插件对索引文档的增删改查

    利用head插件: 1,创建索引并添加一条数据(yananindex:索引名称,yanantype:索引类型,1:索引id) 2.修改索引数据(索引id1不变,_version是对该索引数据执行了几次 ...

随机推荐

  1. ASP&period;NET MVC5&plus;EF6&plus;EasyUI 后台管理系统(43)-工作流设计-字段分类设计

    系列目录 建立好42节的表之后,每个字段英文表示都是有意义的说明.先建立,就知道表的关系和用处了,当然,我的设计只是一个参考,你可能有很多改进的地方. 我们的工作流具体细节流程是这样的: 最终我们的模 ...

  2. 将C&num;文档注释生成&period;chm帮助文档

    由于最近需要把以前的一个项目写一个文档,但一时又不知道写成怎样的,又恰好发现了可以生成chm的工具,于是乎我就研究了下,感觉还不错,所以也给大家分享下.好了,不多废话,下面就来实现一下吧. 生成前的准 ...

  3. getopt函数的使用——分析命令行参数

    getopt(分析命令行参数) getopt(分析命令行参数) 短参数的定义 返回值 范例 getopt_long 相关函数表头文件#include<unistd.h> 函数声明int g ...

  4. 转:如何学习SQL(第一部分:SQL基础)

    转自:http://blog.163.com/mig3719@126/blog/static/285720652010950712271/ 1. 为什么学习SQL 自人类社会形成之日起,社会的运转就在 ...

  5. Mysql主从复制的实现

    MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一 ...

  6. 【转】java参数传递(超经典)

    原文网址:http://blog.sina.com.cn/s/blog_4b622a8e0100c1bo.html Java中的参数传递机制一直以来大家都争论不休,究竟是“传值”还是“传址(传引用)” ...

  7. 移动端&lpar;html5&rpar;微信公众号下用keyup实时监控input值的变化无效

    搜索框依据用户输入的值实时检索,一开始自然而然想到keyup,在拼音状态时,啥问题也没有, 问题1:切换到中文输入法,问题出来了,keyup事件不灵便了,后来在网上搜了下,找到了思路, 问题2:微信公 ...

  8. Web 版 powerdesigner &lpar;Canvas&rpar; 技术分享

    演示地址:http://www.netuml.com:8088  <canvas></canvas>是HTML5出现的新标签,像所有的dom对象一样它有自己本身的属性.方法和事 ...

  9. &lbrack;源码分析&rsqb;StringBuilder

    [源码分析]StringBuilder StringBuilder是继承自AbstractStringBuilder的. 这里附上另外两篇文章的连接: AbstractStringBuilder :  ...

  10. LaTeX多图合并代码示例&lpar;subfigure&rpar;

    \usepakage{subfig} \begin{figure*}[!htb] \centering \subfigure[Derm101 data distribution]{\includegr ...