使用MongoDB的方法

这是在Mac上使用Homebrew安装时的备忘录。

参考文章

以下是一本很受推荐的免费知识资料:《MongoDB的简明手册》。

在中文中表達”用語”

MongoDB是一种面向文档的数据库。

RDB用語との対応表

RDBMongoDBテーブル構造JSON形式SQL文Mongoクエリデータベースデータベーステーブルコレクションレコードドキュメントフィールド(カラム)フィールドインデックスインデックスPrimary key_id

顺便一提,为什么存在与RDB术语和对应概念相符却有不同称谓的原因是因为,尽管它们的界面看起来和操作方式相似,但据说在数据结构和性质上存在着差异。(请参考相关资料)

比如说,以下↓

    レコードに該当するドキュメントの中には、値だけではなくフィールド名も保持している。
# 注意: _idは適当で、ドキュメント毎にユニークな値が生成される
{
    "myCollection": {
        { "_id": "xxx", "foo": 1 } # ドキュメント1
        { "_id": "yyy", "foo": 2 } # ドキュメント2
    }
}
    ドキュメント毎に、独自のフィールドを持つことができる。
{
    "myCollection": {
        { "_id": "xxx", "foo": 1 } # ドキュメント1
        { "_id": "yyy", "foo": 2, "bar": 2 } # ドキュメント2
        { "_id": "zzz", "baz": 3,} # ドキュメント3
    }
}

在Mac上安装、设置和启动

# Homebrewでインストール
$ brew install mongodb

# データ格納用ディレクトリ作成
$ sudo mkdir -p /data/db/mongodb

# 所有者変更
$ sudo chown `whoami` /data/db/mongodb

# 初期化(&起動)
$ mongod --dbpath /data/db/mongodb

# Homebrewでデーモン化してプロセス起動
$ brew services start mongodb --dataPath=/data/db/mongodb

# もしくは普通にプロセス起動
$ mongod --dataPath=/data/db/mongodb

如果在执行brew services start mongodb命令之后,运行brew services list命令时发现状态没有变为started,那就用brew services restart mongodb来重新启动。

基本命令

# 接続
$ mongo

# DB一覧
> show dbs

# DB切り替え
> use mydb

# DBの構造
> db.stats()

# ドキュメント挿入
> db.mycollection.insert(
  {
    "name" : "Taro",
    "gender": "m",
    "attribute" : {
      "hobby" : [
        ”game”,
        "cook"
      ]
    }
  },
  {
    "name" : "Hanako",
    "gender": "f",
    "attribute" : {
      "hobby" : [
        ”movie”
      ]
    }
  }
)

# collection一覧
> show collections

# ドキュメント全取得
> db.mycollection.find()

# 特定のドキュメント取得
# 引数のオブジェクトをセレクタと呼ぶ
# 第1引数に取得したいドキュメントの条件、第2引数に取得したいフィールド
# 1:取得する, 0:取得しない(_idはデフォルト1)
> db.mycollection.find(
    {name: "Taro"},
    {
      _id: 0,
      attribute: {
        hobby: 1
      }
    }
)

# ドキュメント更新
# $setを更新修飾子と呼ぶ。これがないとドキュメント全体が{"gemder": 1}に置き換わる
> db.mycollection.update(
    {name: "Taro"},
    {$set: {"gender": "f"}}
)

# upsert(なかったら追加)
# updateの第3引数にtrue。$incはなかったらインクリメントという動作になる
> db.counter.update(
    {type: "success"},
    {$inc: {count: 1}},
    true
)

# 複数同時更新
# 第4引数にtrue、第3引数もtrueだと複数同時upsert
> db.user.update(
    {},
    {$set: {gender: "m"}},
    false,
    true
)

# ドキュメント削除
> db.mycollection.remove({name: "Jiro"})

# collection削除
> db.mycollection.drop()

# DB削除
> db.dropDatabase()

# 終了
> exit

– 当向不存在的数据库和集合添加文档时,将同时创建该数据库和集合。
– 当删除集合时,如果数据库中不再有集合存在,那么该数据库也将被删除。

更新修飾子 – 更新修饰符

可用于 update 的修饰符的清单表

更新修飾子意味$setフィールドの一部を更新$incフィールドの値を増やす$pushフィールドに値を追加

函数 shù)

# sort(1:昇順、-1:降順)
$ db.user.find().sort({age:1})

# count
$ db.user.count()

只有使用库才能使用sum等功能,这是一个不方便之处,但是存在一些叫做”反剧技”的方法,如保存和调用函数以及使用forEach和map等。可以尝试在mongo shell中保存和加载Server-Side函数来使用。

比较运算符

SQLMongoDB概要サンプル<$lt未満{age: {$lt: 100}}<=$lte以下{age: {$lte: 100}}>$gtより大きい{age: {$gt: 100}}>=$gte以上{age: {$gte: 100}}!=$ne等しくない{name: {$ne: ‘mr.a’}}なし$existsフィールドの存在チェックdb.mycol.find({hoge: {$exists: false}})OR$or$orで指定する条件のいずれかを満たすものを抽出db.mycol.find({$or: [{loves: ‘apple’},{loves: ‘energon’}]})
广告
将在 10 秒后关闭
bannerAds