只需要一个选项,请用中文将以下内容进行翻译:为了处理MongoDB,至少需要了解的基本知识
概述
这是一个以以下观点总结的MongoDB操作简易参考手册。
-
- とりあえずこれだけ知っていればMongoDBをデータストアとしたアプリ開発に入れる
- 開発Teamメンバーに知っておいてほしいこと
前提 tí)
-
- MongoDBがセットアップ済みであること
- 参照、更新コマンド、クエリセレクタは最低限使えること
环境
使用環境バージョンCentOS7.6MongoDB server4.0.5
确认状态
数据库列表
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
数据库切换(新建)
> use testdb
switched to db testdb
收藏清单
> show collections
company
department
user
初始化相关
收集首字母缩写
> db.user.remove({})
删除收藏
Note: The given phrase seems to be in Japanese rather than Chinese. However, it can be directly translated into Chinese as “删除收藏” to convey the same meaning.
> db.user.drop()
删除数据库
在设定目标的情况下执行放弃操作。
> use testdb
> db.dropDatabase()
设计和性能调优
请确认查询计划
> db.user.find({name:"koda"}).explain()
确认索引
> db.user.getIndexes()
通常情况下,会进行索引的创建。
数值1:升序,数值-1:降序。
> db.user.createIndex({name: 1})
创建索引(唯一)
> db.user.createIndex({name: 1}, {unique: true})
创建索引(多字段)
> db.user.createIndex({name: 1, sex: 1})
请确认帮助命令。
帮助我 wǒ)
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
(省略)
查看指令
可以使用Tab补全
DB命令
> db.
db.adminCommand( db.fsyncLock( db.getWriteConcern( db.revokePrivilegesFromRole(
db.aggregate( db.fsyncUnlock( db.grantPrivilegesToRole( (省略)
收藏指令
> db.user.
db.user.addIdIfNeeded( db.user.getCollection( db.user.mapReduce(
db.user.aggregate( db.user.getDB( db.user.propertyIsEnumerable
(省略)
命令行执行
直接执行
$ echo $SHELL
/bin/bash
$ mongo --host localhost --quiet testdb --eval 'db.user.find()'
{ "_id" : ObjectId("5c7768915fd5d6ec50b38477"), "uid" : 1, "name" : "koda", "sex" : "男" }
{ "_id" : ObjectId("5c7768915fd5d6ec50b38478"), "uid" : 2, "name" : "mori", "sex" : "男" }
{ "_id" : ObjectId("5c7768915fd5d6ec50b38479"), "uid" : 3, "name" : "kubo", "sex" : "男" }
执行JavaScript
准备一个js文件
var users = db.user.find();
users.forEach(function(user) {
if (user) {
print(user._id + '\t' + user.name + '\t' + user.sex);
}
});
执行
$ mongo --quiet testdb ./find.js
5c7768915fd5d6ec50b38477 koda 男
5c7768915fd5d6ec50b38478 mori 男
5c7768915fd5d6ec50b38479 kubo 男
备份,恢复
转储车
$ mongodump --archive=/tmp/testdb.20190228.gz --gzip --db testdb
恢复
在没有目标数据库的情况下执行。
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
$ mongorestore --gzip --archive=/tmp/testdb.20190228.gz --db testdb
出口和进口
导出
$ mongoexport --db testdb --collection user --out /tmp/user.json
引入
$ mongoimport --db testdb_new --collection user --file /tmp/user.json
序列
创建一个函数用于自动增量,并像RDB的序列那样使用。
> use testdb
创建一个 counters 集合。
> db.counters.insert(
{
_id: "userid",
seq: 0
}
)
> db.counters.find()
{ "_id" : "userid", "seq" : 0 }
创建一个自动递增的函数。
-
- 永続的に使える状態にするため、db.system.jsに登録しておく
- Mongo shell上で定義した変数やfunctionはログオフで消えてしまうため
> db.system.js.save({_id:'my_seq', value:function (name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
}
);
return ret.seq;
}
});
为确认而注销登录
> exit
bye
重新连接
$ mongo
> use testdb
加载已注册的脚本
> db.loadServerScripts()
获取序列
> my_seq('userid')
1
> my_seq('userid')
2
> my_seq('userid')
3
如果要实际使用的话,可以这样。
> db.users.insert({_id: my_seq('userid'), name: "seq_test_user"} )
> db.users.find()
{ "_id" : 4, "name" : "seq_test_user" }
用户认证
在创建应用程序用户之前,请准备超级用户。
用户管理员的注册
#security:
> use admin
> db.createUser({
user:"admin",
pwd:"manager",
roles:[{ role:"userAdminAnyDatabase", db:"admin" }]
})
重新启动
啟用認證設置
security:
authorization: enabled
# systemctl restart mongod
手机应用程序用户注册
用户重新连接的管理员
$ mongo -u "admin" -p "manager" --authenticationDatabase="admin"
> use testdb
> db.createUser(
{
user: "airuser",
pwd:"airuser",
roles:[
{role:"readWrite", db:"testdb"}
]
}
)
参考:内置角色
切换角色
> use testdb
> db.updateUser(
"airuser",
{
roles:[
{role: "readWrite",db: "testdb"}
]
}
)
确认已注册的用户
> use admin
> db.system.users.find()
确认连接
连接为应用程序用户
$ mongo --host localhost -u "airuser" -p "airuser" --authenticationDatabase="testdb"
我只能看到DB的许可证。
> show dbs
testdb 0.000GB
赠品
用PHP进行访问
在用户验证状态下进行验证。
准备文件
<?php
// DBへ接続
$mongo = new MongoClient("mongodb://localhost:27017/testdb",
array("username" => "airuser", "password" => "airuser"));
// データベースを指定
$db = $mongo->selectDB("testdb");
// コレクションを指定
$coll = $db->selectCollection("user");
// コレクションのドキュメントを取得
$docs = $coll->find(array('uid' => 1));
// 表示
foreach ($docs as $id => $obj) {
print_r($obj);
}
?>
执行
$ php mongo.php
Array
(
[_id] => MongoId Object
(
[$id] => 5c7787e73cf5a95585ea27f7
)
[uid] => 1
[name] => koda
[sex] => 男
)
展开场地纵向
经常使用对吧
> db.user.find().pretty()
{
"_id" : ObjectId("5c7768915fd5d6ec50b38477"),
"uid" : 1,
"name" : "koda",
"sex" : "男"
}
-
- cf.
MySQL: SQLの最後に \G
PostgreSQL: メタコマンド \x
请看以下内容
-
- Qiita
MongoDBチートシート
MongoDB超入門
mongoDBよく使うコマンド集(随時更新)
MongoDB 4.0 での互換性の変更
MongoDBのデータ構造な簡単な操作など
MongoDBコマンド一覧(自分用メモ)
mongo shellの操作まとめ
MongoDBのユーザ管理
MongoDB(本家)
Create an Auto-Incrementing Sequence Field