使用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’}]})