尝试入门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字段,操作会发生变化。
-
- 如果_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》是小笠原德彦所著的一本工学社出版的书籍。