一、简单介绍

MongoDB是一个高性能。开源。无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种。数据被分组存储在数据集中,被称为一个集合(Collenction)和对于存储在MongoDB数据库中的文件,我们不须要知道它的不论什么结构定义的自由模式,在存储数据时是以键-值对的集合键是字符串,值能够是数据类型集合里的随意类型,包含数组和文档。

MongoDB存储在集合中的全部文件,集合是一组有一组共享公共索引的相关文档。集合类似于关系数据库中的表。在MongoDB中,这些操作改动单个採集数据,为更新和删除、删除操作。我们先认识一下MongDB结构:

MongoDB

关系数据库

数据库(database)

数据库(database)

集合(collection)

表(table)

文档(document)

行(row)

集合(collection)                                                                                                           文档(document)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

二.MongoDB 加入

 1. 加入一个新的文档到集合语法

db.collection.insert()

样例:

    >db. orders.insert({
"onumber" : "001",
"date" : "2015-07-02",
"cname" : "zcy",
})

相对于SQL语句是:

INSERT INTO orders
(onumber, date, cname)
VALUES (“001”,” 2015-07-02”,” zcy”)

2.同一时候加入多个文档,能够传入数组

> db. orders.insert(
[{
"onumber" : "001",
"date" : "2015-07-02",
"cname" : "zcy",
},{
"onumber" : "002",
"date" : "2015-07-02",
"cname" : "zcy1",
}
])



3.加入文档再包括文档的(层级三级)

样例:

>db. orders.insert({
"onumber" : "001",
"date" : "2015-07-02",
"cname" : "zcy",
"items" :[ {
"ino" : "001",
"quantity" : 2,
"price" : 4.0,
"products" : [
{
"pno":"001",
"pName":"p1"
},
{
"pno":"002",
"pName":"p2"
}
]
},{
"ino" : "002",
"quantity" : 2,
"price" : 6.0,
"products" : [
{
"pno":"003",
"pName":"p3"
},
{
"pno":"004",
"pName":"p4"
}
]
}
]
})

说明:

存储在MongoDB集合中的每一个文档(document)都有一个默认的主键_id,这个主键名称是固定的,它能够是MongoDB支持的不论什么数据类型,默认是ObjectId

三. MongoDB 查询

1.对文档查询的语法,我们在这边做简单的介绍,我们会专门的写一篇比較具体的介绍

>db.collection.find()

运行查询全部的记录

2.我们能够依据条件查询

样例:

>db.orders.find({onumber:'001'});

四. MongoDB 改动

 1. 对文档进行改动的语法

>db.collection.update(
<query>,
<update>,
upsert:<boolean>,
multi:<boolean>
)

參数

类型

描写叙述

query

document

要改动哪些的查询条件,类似于SQL 的 where

update

document

要改动的字段相应的值

upsert

boolean

可选的,默认值是false。

假设依据查询条件没找到相应的文档,假设设置为true,相当于运行insert,假设设置为false,不做不论什么的操作。

multi

boolean

可选的。默认值是false。假设依据查询条件找到相应的多条记录是,假设设置为false时,仅仅改动第一条,假设设置为true,所有更新

2.对单个字段进行改动

名称

描写叙述

$inc

依据要加入的值递增该字段的值。

$mul

将该字段的值乘以指定的值

$rename

重命名字段

$setOnInsert

操作时,操作给对应的字段赋值

$set

用来指定一个键的值,假设不存在则创建它

$unset

用来指定一个键的值。假设不存在不创建创建它

$min

仅仅有当指定的值小于现有字段值时才更新该字段。

$max

仅仅有当指定的值大于现有字段值时才更新该字段。

$currentDate

设置当前日期字段的值,或者作为一个日期或时间戳。

我们接来对几个比較经常使用的进行操作说明,其余的语法都是一样

2) 採用$set来依据查询条件改动文档,用来指定一个键的值。假设不存在则创建它。

样例:

> db.orders.update(
{"onumber" : "001"},
{ $set: { "cname " : "zcy"} },
false,
true
)

SQL语句。假设set指定一个字段改动值时,假设没有的话会报错。

UPDATE orders
set cname=’zcyUp’
WHERE onumber=’001’

改动之前:

> db. orders.insert({
"onumber" : "001",
"date" : "2015-07-02",
})

改动之后:

multi 设置为true,所有更新

3)$mul  将该字段的值乘以指定的值

语法:

{ $mul: { field: <number> } }

样例:

>db. orders.update(
{"ino" : "001"},
{ $mul: {"quantity" :3} }
)

改动之前:

>db. orders.insert({
"ino" : "001",
"quantity": 2,
"price" : 4.0
}

改动之后:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

4)$setOnInsert     操作时,操作给对应的字段赋值

语法:

db.collection.update(
<query>,
{$setOnInsert: { <field1>: <value1>, ... } },
{upsert: true }
)

样例:

>db.products.update(
{"ino" : "001"},
{
$set:{ "quantity":3 },
$setOnInsert:{ "defaultQty":100 }
},
{upsert: true }
)

5)$inc,指定属性的值加上如今的值,假设键不存在则创建它。

语法:

{ $inc: { <field1>: <amount1>,<field2>: <amount2>, ... } }

样例:

>db. orders.update(
{"onumber" : "001","items.ino":"001"},
{ $inc: {"items.$.price" : 2.0} }
)

改动前的数据:

>db. orders.insert({
"onumber" : "001",
"date" : "2015-07-02",
"cname" : "zcy",
"items" :[ {
"ino" : "001",
"quantity" : 2,
"price" : 4.0,
"products" : [
{
"pno":"001",
"pName":"p1"
},
{
"pno":"002",
"pName":"p2"
}
]
},{
"ino" : "002",
"quantity" : 2,
"price" : 6.0,
"products" : [
{
"pno":"003",
"pName":"p3"
},
{
"pno":"004",
"pName":"p4"
}
]
}
]
})

改动后的数据:

ino等于001的price变成6

3.对数组进行改动



名称

说明

$

作为一个占位符的更新与查询条件在一个更新的第一要素

$addToSet

将元素加入到数组中,仅当它们在集合中不存在

$pop

删除数组的第一个或最后一个项

$pullAll

从数组中移除全部匹配值

$pull

移除匹配指定查询的全部数组元素

$pushAll

将全部值加入到数组中

$push

将值加入到数组中。假设有的数组存在则向数组末尾加入该值,假设数组不存在则创建该数组并保存该值

(1)依据查询条件改动文档里内嵌文档(第二层级的),比如我们想改动items 字段ino为001下的price的4改动8,语法items.$. price 。更新数组中第一个匹配的子文档。我们内嵌文档的ino是唯一的。满足我们的需求

样例:

>db. orders.update(
{"onumber" : "001","items.ino":"001"},
{ $set: {"items.$.price" : 8.0} }
)

改动前的数据:

改动后的数据:

ino等于001的price值由4改动成8

ino等于002的price值还是不变

(2)依据查询条件改动文档里内嵌文档在内嵌文档(第三层级的),比如我们想改动items 字段ino等于001下的products而且pno等于001的pName值为ps,语法items.0. products.$. pName,0代表items第一个数组(也就是数组的下标),$ 更新数组中第一个匹配的子文档。

样例:

>db. orders.update(
{"onumber" : "001","items.ino":"001","items.products.pno":"001"},
{ $set: {"items.0.products.$.pName": "ps"} }
)

改动前的数据:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

改动后的数据:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

(3)$pop删除数组的第一个或最后一个项

语法:

{ $pop: { <field>: <-1 | 1>,... } }

1最后一项

-1是第一项

样例:

>db. orders.update(
{"onumber" : "001"},
{ $pop: {"items" : -1} }
)

改动前的数据

改动后的数据

把ino等于001删除。仅仅剩ino为002

(4)$push将值加入到数组中。假设有的数组存在则向数组末尾加入该值。假设数组不存在则创建该数组并保存该值

语法:

 { $push: { <field1>: <value1>,... } }

样例:

>db. orders.update(
{"onumber" : "001"},
{ $push: {"items" : {
"ino" : "002",
"quantity" :2,
"price" : 6.0,
"products" : [
{
"pno":"003",
"pName":"p3"
},
{
"pno":"004",
"pName":"p4"
}
]
}
} }
)

改动前的数据:

>db. orders.insert({
"onumber" : "001",
"date" : "2015-07-02",
"cname" :"zcy",
"items" :[ {
"ino" : "001",
"quantity": 2,
"price" : 4.0,
"products" : [
{
"pno":"001",
"pName":"p1"
},
{
"pno":"002",
"pName":"p2"
}
]
}
]
})

改动后的数据:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

$pull与$push相反,这边就不介绍了。

五、MongoDB删除

(1) 删除文档

语法

db.collection.remove()

样例:

1)db. orders.remove({})

删除orders集合的全部数据,集合还存在。索引都还存在,相当与SQ的truncate命令

2)db. orders.remove({"onumber": "001"})依据条件删除数据

(2) 删除集合

语法:

db.collection.drop()  集合、索引都不存在了。

学习MongoDB 二:MongoDB加入、删除、改动的更多相关文章

  1. Mongodb学习笔记二(Mongodb基本命令)

    第二章 基本命令 一.Mongodb命令 说明:Mongodb命令是区分大小写的,使用的命名规则是驼峰命名法. 对于database和collection无需主动创建,在插入数据时,如果databas ...

  2. MongoDB(二)创建更新删除文档

    插入并保存文档操作 用insert向目标集合插入文档,如果没有_id键则会自动添加.最后自动保存. >db.foo.insert({"bar":"baz" ...

  3. MongoDB学习记录(二) - MongoDB的"增查改删"操作之"增"

    如果做插入文档操作的集合不存在,那么集合将被创建 db.collection.insertOne() insertOne为collection插入一条文档,如果文档的_id字段未指定,MongoDB会 ...

  4. MongoDB (二) MongoDB 优点

    任何关系型数据库,具有典型的架构设计,显示表和这些表之间的关系.虽然在 MongoDB中,没有什么关系的概念. MongoDB比RDBMS的优势 架构:MongoDB是文档型数据库,其中一个集合保存不 ...

  5. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  6. NOSQL学习之二:MongoDB

    MongoDB是一个高性能,开源,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,是当前NoSQL数据库中比较热门的一种. MongoDB使用C++开发.不支持SQL ...

  7. WebFlux系列(十二)MongoDB应用,新增、修改、查询、删除

    #Java#Spring#SpringBoot#Mongo#reactor#webflux#数据库#新增#修改#查询#删除# Spring Boot WebFlux Mongo数据库新增.删除.查询. ...

  8. 【mongodb系统学习之二】mongodb的启动

    二.mongodb的启动: 1.在mongodb2.6.9的文件夹中建立data目录.logs目录以及   logs目录下的mongodb.log文件,如图: 2.进入到mongodb的bin目录中执 ...

  9. MongoDB快速入门学习笔记6 MongoDB的文档删除操作

    db.集合名称.remove({query}, justOne)query:过滤条件,可选justOne:是否只删除查询到的第一条数据,值为true或者1时,只删除一条数据,默认为false,可选. ...

随机推荐

  1. java学习之即时通信项目实战

     项目总结:这次项目主要是根据视频来的,结果跟到一半感觉跟不上,慢慢自己有了自己的想法,决定自己先不看学习视频,自己先试着写. 总结写前面,算是写的第一个项目吧.项目中遇到几点问题,首先Scoket对 ...

  2. 使用python网络库下载

    下载1000次网页资源 1,普通循环方式下载1000次,非常慢 #!/usr/bin/python # -*- coding: utf-8 -*- import sys import os impor ...

  3. 将文件存储到数据库中(MySQL)

    package com.play; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...

  4. Cloud Foundry warden container 安全性探讨

    本文将从Cloud Foundry中warden container的几个方面探讨warden container的安全性. 1. warden container互訪 1.1.  互訪原理· 在Cl ...

  5. SQL 语言划分

    从功能上划分,SQL 语言能够分为DDL,DML和DCL三大类. 1. DDL(Data Definition Language)     数据定义语言,用于定义和管理 SQL 数据库中的全部对象的语 ...

  6. BZOJ 3175: [Tjoi2013]攻击装置( 匈牙利 )

    黑白染成二分图, 然后不能同时选的就连边, 最大匹配数为m, t为不能放的数目, 则题目所求最大点独立集为 n*n-m-t -------------------------------------- ...

  7. mysql innodb存储引擎的聚集索引

    InnoDB聚集索引 MySQL有没有支持聚集索引,取决于采用哪种存储引擎. MySQL InnoDB一定会建立聚集索引,所谓聚集,指实际数据行和相关的键值保存在一块,这也决定了一个表只能有一个聚集索 ...

  8. (IOS)数据持久化

    1.属性列表序列化 2.模型对象归档 3.嵌入式SQLite3 4.Core Data 5.应用程序设置 6.UIDocument管理文档存储 7.iCloud Demo界面: 1.属性列表序列化 即 ...

  9. 导出Excel并下载,但无法定制样式的方法!

    拿来的,望原创见谅! public void EXCELDown(DataTable dt, string strFileName) { Response.ContentEncoding = Syst ...

  10. Sqlite出现SQL error: database disk image is malformed的处理

    SQLite有一个很严重的缺点就是不提供Repair命令.导致死亡提示database disk image is malformed它的产生有很多种可能,比如,磁盘空间不足,还有就是写入数据过程中突 ...