只需要一个选项,请用中文将以下内容进行翻译:为了处理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

广告
将在 10 秒后关闭
bannerAds