最近DBはMongoDBしか使ってないぽちです,おはようございます!
Node.js + MongoDBの組み合わせで使うことがほとんどなので,スクリプトからはmongooseを使うのですが,ちょっとDBの中身を確認したりするのでmongodbのshellを使うことも多いです.
普段mongooseを使っていると,mongodbのshellが貧弱で困ることがあります.
1
2
| > db.users.findOne({_id:"<存在するObjectId>"})
null
|
みたいな.
正しくはこう書かねばなりません.
1
2
3
4
5
| > db.users.findOne({_id:ObjectId("<存在するObjectId>")})
{
"_id":ObjectId("<存在するObjectId>")
:
}
|
めんどくさい!ObjectId
と毎回タイプするのがめんどくさい!
1
| > db.users.findOneById("<存在するObjectId>")
|
と書ければ楽だなーと思って探したら,
1
| > DBCollection.prototype.findOneById = function(id){return this.findOne({_id:ObjectId(id)});};
|
とかやってあげると
1
2
3
4
5
| db.users.findOneById("<存在するObjectId>")
{
"_id":ObjectId("<存在するObjectId>")
:
}
|
楽ちんだ!
findOneById
とか長い!
1
2
3
4
5
6
| > DBCollection.prototype.findOneById = DBCollection.prototype.fbi = function(id){return this.findOne({_id:ObjectId(id)});};
db.users.fbi("<存在するObjectId>")
{
"_id":ObjectId("<存在するObjectId>")
:
}
|
楽ちんだ!!!!さすがFBI!!!連邦捜査局!!!
はい,でもこれを毎回打つのが超めんどくさい.
そういう時は,~/.mongorc.js
を配置しましょう.
1
2
3
4
5
6
7
| $ echo "DBCollection.prototype.findOneById = DBCollection.prototype.fbi = function(id){return this.findOne({_id:ObjectId(id)});};" > ~/.mongorc.js
$ mongo hoge
> db.users.fbi("<存在するObjectId>")
{
"_id":ObjectId("<存在するObjectId>")
:
}
|
楽ちん!
上ではfindOneById
だけですが,どんどん追加できるので,決まったaggregateがあるならパラメータを渡す簡単構文でaggregateしたりmongooseでいうpopulate
的な動作も出来ると思います.
meshというmongo shellに色々ライブラリを読み込んでくれるのもあるのですが,欲しいのがなかったので自分で作って公開するといいよ!
まとめ
~/.mongorc.js
にmongo shellを拡張するスクリプトを置くと便利!