尝试入门MongoDB(1):CRUD操作

这篇文章没有特定的逻辑结构,几乎是为了自己做备忘录而随意书写的。

请注意我们使用的是Percona Server for MongoDB,而不是原版的MongoDB。

的是什么?

学习mongoDB的基本操作方法(CRUD)。

引入MongoDB

在这里,故意选择了Percona server for MongoDB而不是官方的原装MongoDB。通过引入官方的Docker映像来进行安装设置。

sudo docker pull percona/percona-server-mongodb
sudo docker run -d --name percona -p 3306:3306 percona/percona-server-mongodb

启动已完成。

使用MongoDB

连接到MongoDB

sudo docker exec -it percona /bin/bash
mongo

连接正常。

对于文档的创建、读取、更新和删除操作 (CRUD)。

创建文件

mongo
use foo

在mongo命令中指定要使用的数据库名称以进入mongo shell。

db.sample.insert({name: "test"})
db.コレクション名.count()
1

文档读取

在find方法中,默认情况下,会返回一定数量(默认为20个)的游标。

db.コレクション名.find()
{ "_id" : ObjectId("5867deb238a8218f8be46c55"), "name" : "test" }

在findOne中返回单个文档。

db.コレクション名.findOne()
{ "_id" : ObjectId("5867deb238a8218f8be46c55"), "name" : "test" }
db.コレクション名.find(検索条件, 射影)
db.コレクション名.findOne(検索条件, 射影)

条件筛选操作符

确认范围

在搜索条件中,不仅可以匹配,还可以指定数字范围。

オペレータ意味$gt〜より大きい(Greater Than)$gte〜以上(Greater Than or Equal$lt〜未満(Less Than)$lte〜以下(Less Than or Equal
检查字段是否存在($exists)
db.コレクション名.find({フィールド名: {$exists: true}})

显示具有特定字段名称的文档。

文档的更新「更新」

var doc1 = db.コレクション名.findOne()
doc1.フィールド名 = 更新値

通过操作员的操作

在更新文档的值(尤其是数值)时,可以使用运算符。

オペレータ内容$set値の設定$inc値の加算(減算)$mul値の乗算(除算)$unset値の削除
使用$set操作符进行字段更新和添加
db.コレクション名.update({検索条件}, {$set: {キー: 値, ... })

在更新数值信息时,使用inc操作符比set操作符更好吗?

使用$inc操作符对字段值进行原子更新(增加)
db.コレクション名.update({検索条件}, {$inc: {キー: 加算値, ...}})

可以对已经存在的键对应的值进行原子性描述的操作。

使用$mul操作符对字段值进行原子化更新(乘法操作)。
db.コレクション名.update({検索条件}, {$mul: {キー: 乗算値, ...}})
使用$unset操作符删除字段
db.コレクション名.update({検索条件}, {$unset: {キー: 値, ...}})

在$unset内部指定的值是没有意义的。

操作数组

不仅需要单独的值,还需要对数组进行操作。

数组操作符如下所示。

オペレータ意味$push要素の末尾に要素を一つ追加$pop要素の一つを削除$pull指定条件にマッチする要素を一つ削除$pullAll指定条件にマッチする要素すべて削除
通过$push方法添加元素。
db.col1.insert({ary: [0, 1, 2, 3, 2, 1, 0]})
db.col1.update({ary: {$exists: true}}, {$push: {ary: 10}})
使用$pop删除值
db.col1.update({ary: {$exists: true}}, {$pop: {ary: -1}})

当在$pop中指定”-1″时,将会删除数组的第一个值。
当指定其他值时,将会删除数组的最后一个值。

使用$pull进行批量删除。

删除与条件匹配的元素。

db.col1.update({ary: {$exists: true}}, {$pull: {ary: {$gte: 2}}})

如果 ary 中的值大于 2,则删除

使用$pullAll进行批量删除

删除符合条件的元素。

db.col1.update({ary: {$exists: true}}, {$pullAll: {ary: [1,2]}})

如果 ary 中的值为 1 或 2,则删除。

特别的更新操作(保存,更新)

存在两种情况,即在文档状态上变化时,分别为保存(save)和更新插入(upsert)操作。

保存
db.コレクション名.save(挿入・更新したいドキュメント)

根据要插入或更新的文档的_id字段,操作会发生变化。

    1. 如果_id与现有文档匹配 => 更新

 

    如果_id与现有文档不匹配(或无_id) => 插入
更新或插入
db.コレクション名.update(検索条件, 挿入or更新したいドキュメント内容, {upsert: true})

批量更新多个文档

db.コレクション名.update(検索条件, アップデート内容, {multi:true})

在中文中进行批量搜索和修正(findAndModify)。

db.コレクション名.findAndModify(
    query: 検索条件,
    sort: ソート条件,
    remove: 削除指定,
    update: アップデート指定,
    new: 関数の返り値指定,
    fields: 返り値の射影(sqlのselectに相当),
    bypassDocumentValidation: ドキュメントのバリデーション有無,
    writeConcern: 書き込み条件
)

删除

删除文件

db.コレクション名.remove(検索条件)

删除收藏

db.コレクション名.drop()

删除数据库

use 削除したいデータベース名
db.dropDatabase()

文献引用

《初次使用MongoDB》是小笠原德彦所著的一本工学社出版的书籍。

广告
将在 10 秒后关闭
bannerAds