130
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

MongoDBのシェルの操作方法メモ

便利ページ

公式

参考になったページ


基本的な操作方法

mongo
show dbs
use dbName
show collections
col = db[collectionName]

help
db.help()
col.help()

以下、Twitter streaming apiのJSONを保存したコレクションの操作例

ドキュメント数を表示

db.collectionName.count()
db[collectionName].count()
  • 英数字以外のコレクション名の場合db[collectionName]でアクセスする必要がある

sort, limit

最新10件を表示

col.find({}).sort({$natural:-1}).limit(10)

findで一致したドキュメントの一部プロパティだけを取得

スクリーン名と本文だけを表示

col.find({}, {_id:false, "user.screen_name":true, text:true }).sort({$natural:-1}).limit(10)
  • 入れ子になったプロパティの直接指定は""で囲う

findしたドキュメントに対してjavascript関数を実行して表示

スクリーン名と本文だけを表示

col.find({}).sort({$natural:-1}).limit(10).forEach( function(a){print(a.user.screen_name, ":",  a.text)} )

特定のプロパティが存在しないドキュメントだけを表示

リツイートではない普通のツイートだけ表示

col.find({retweeted_status:{ $exists: false }}).sort({$natural:-1}).limit(5).forEach( function(a){print(a.user.screen_name, ":", a.text )} )

ある配列プロパティの内容が一定値以下のドキュメントだけを表示

リツイートではなくて、かつ、ハッシュタグが2つ未満のツイートだけ表示

col.find( { retweeted_status:{$exists:false}, $where:"this.entities.hashtags.length < 2"  }).sort({$natural:-1}).limit(20).forEach( function(a){ print(a.user.screen_name, ':' , a.text); } )
  • findの$sizeで指定した個数と一致するものが得られるが範囲指定はできないので、$whereをつかう

mongoコマンドの引数指定による操作方法

mongo localhost:27017/dbName --eval 'db["collectionName"].count()' --quiet

または

echo 'print(db["collectionName"].count());' > somescript.js
mongo --quiet localhost:27017/dbName somescript.js

のように操作できる

クエリ結果のJSONを標準出力させてファイルに保存

echo 'shellPrint(db["collectionName"].find().limit(10)));' > query.js
mongo --quiet localhost:27017/dbName query.js > result.json
  • shellPrint()で標準出力にでてくる

クエリ結果を別のコレクションに保存する

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
130
Help us understand the problem. What are the problem?