mongodb 的概念介绍


(以前截的图,找不到来源了)

数据库相关操作

连接数据库

mongodb://username:password@db_host/db_name

创建/切换数据库

use db_name 

没有就会创建,有就会切换到该数据库

查看数据库

show dbs

删除数据库

db.dropDatabase()

删除当前所在数据库

查看当前所在数据库

db

集合的操作

创建集合

db.createCollection(name, options)

name 必选,是集合的名称
options 可选,携带一些配置参数,可选的有以下
capped: bool 类型,如果为 true 则表示这是一个固定集合,必须指定 size 参数。这样当集合大小达到 size 指定值时,新插入的文档会覆盖最早的文档。
size:数值,为集合固定一个最大值(以字节计)
autoIndexId:bool 类型,如果为 true,自动在 _id 字段创建索引。
max:数值,固定中包含的文档最大数量。

例如

db.createCollection(“mycol”,{capped:true, autoIndexId: true, size: 10000, max: 100})

实际在使用中并不需要显性的创建集合。在插入文档的时候会自动创建
db.mycol.insert({“name”:”Laily”})

查看集合

show collections

删除集合

db.mycol.drop()

删除集合 mycol

文档操作

插入文档

db.<collection_name>.insert(document)

查看文档

db.<collection_name>.find(query, projection)

query: 可选,查询条件
projection:可选,使用投影操作指定返回的键。省略该参数则返回文档中的所有键值。
db.<collection_name>.find().pretty() 使用易读的方式查看。

查询条件

$ne ———– not equal !=
$eq ——– equal =

AND

db.<collection_name>.find({field1:value1, field2:value2})

OR

find{
    $or:[
        {field1 : value1}, {field2 : value2}
    ]
}

AND OR 联用

find{
    {field1 : value1},
    $or : [
        {field2 : value2},
        {field3 : value3}
    ]
}

相当于 where field1 = value AND (field2 = value2 OR field3 = value3)

projection 使用

find{query, {title: 1, name: 1}} // inclusion 模式,指定返回的键,不返回其它键,
find{query, {title: 0, name: 0}} // exclusion 模式,指定不返回的键。

_id 默认返回
两种模式不能混用,只能全 0 或者全 1
要指定 project 参数不需要 query 参数时,query 参数可以用 {} 代替。

替换文档

db.<collection_name>.save(document)

如果 document 指定 _id 字段,就回用该文档替换之前 _id 字段相同的文档,不指定就和 insert 操作一样。

更新文档

db.<collection_name>.update(
    <query_obj>
    <update_obj>
    {
        upsert: <bool>,
        multi: <bool>,
        writeConcern: <document>
    }

query_obj: update 的查询条件
update_obj: 需要更新的对象
upsert: 可选,true 表示不存在就插入,默认为 false
multi: 可选,true 表示把所有查出来的结果都更新, false 只更新查找到的第一条。
writeConcern:可选,抛出异常的级别。

例如

db.mycol.update({“name”: “Laily”}, {$set:{“name”:”Laily1"}})

更新操作符

$inc
用法 {$inc:{field:value}}
作用:对数值字段的某个 field 增加 value,如果没有该字段就直接赋值。

$set
用法 {$set:{field:value}}
作用:把某个 field 的值设为 value

$unset
用法 {$unset: {field1:””,…}} 可以有多个 field
作用,删除 field

$push
用法 {$push: {field : value}}
作用 把 value 追加到 field 里,field 必须是数组类型,如果 field 不存在,会自动插入一个数组类型。

$pushAll
用法 {$push : {field : <value_array>}}
和 push 一样,但是可以追加多个 value。

$addToSet
用法 {$addToSet : {field : value}}
加一个值 value 到数组 field 内,只有当该值不在数组中时才添加。

$pop
{$pop : {field : -1}} 删除数组 field 里的第一个元素
{$pop : {field : 1}} 删除数组 field 里的最后一个元素

$pull
{$pull : {field : value}}
从数组 field 里删除一个等于 value 的值
对应的也有 $pullAll

$rename
{$rename : {old_field_name : new_filed_name}}
对字段进行重命名

删除文档

db.<collection_name>.remove(
    <query>,
    {
        justOne : <boolean>
        writeConcern : <document>
    }
)

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

writeConcern

WriteConcern.NONE:没有异常抛出
WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。