MongoDBでcustomer_tracker-990のような特殊文字を含むデータベース名を扱う方法
MongoDBで特殊文字を含むデータベース名を操作するには
「customer_tracker-990」のようにハイフンなどの特殊文字が含まれるデータベース名を扱う場合、getSiblingDB()メソッドを使用するのが確実な方法です。通常のドット記法(db.データベース名)では、特殊文字を含む名前を正しく解釈できないことがあります。
ここでは、getSiblingDB()を使ってドキュメントの追加から取得までを行う手順を紹介します。
1. データベースに切り替えてドキュメントを挿入する
まず、useコマンドで対象のデータベースに切り替え、demo1コレクションにドキュメントをinsertOne()で追加していきます。
> use customer_tracker-990;
switched to db customer_tracker-990
> db.demo1.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea4697ca7e81adc6a0b3954")
}
> db.demo1.insertOne({"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea46980a7e81adc6a0b3955")
}
> db.demo1.insertOne({"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea46984a7e81adc6a0b3956")
}2. getSiblingDB()を使ってドキュメントを取得する
次に、getSiblingDB()メソッドでデータベースを明示的に指定し、find()メソッドを使ってコレクション内のすべてのドキュメントを表示します。この方法なら、ハイフンを含むデータベース名でも問題なくアクセスできます。
> db.getSiblingDB("customer_tracker-990").demo1.find();実行結果
上記のコマンドを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5ea4697ca7e81adc6a0b3954"), "Name" : "Chris" }
{ "_id" : ObjectId("5ea46980a7e81adc6a0b3955"), "Name" : "David" }
{ "_id" : ObjectId("5ea46984a7e81adc6a0b3956"), "Name" : "Bob" }まとめ
getSiblingDB()は、引数として渡した文字列をそのままデータベース名として解釈してくれるため、ハイフンやスペースなど、JavaScriptの識別子として無効な文字を含むデータベース名にも安全にアクセスできます。特殊文字を含むデータベースを運用する際は、この方法を活用しましょう。
-
MongoDBで「NOT LIKE」を実現する方法|$not演算子と正規表現の使い方
MongoDBには、SQLにあるような「NOT LIKE」演算子は用意されていません。しかし、$not演算子と正規表現を組み合わせることで、同じ条件指定を簡単に実現できます。この記事では、実際にコレクションを作成しながら、$not演算子の使い方を具体的に解説します。1. サンプルコレクションの作成まずは動作確認のためのコレクションを作成します。以下のクエリで、学生名(StudentName)を含むドキュメントを5件挿入します。> db.notLikeOperatorDemo.insertOne({StudentName:John Doe}); { acknowledged : tr
-
MongoDBでコンソールをクリアする2つの方法|ショートカット「Ctrl + L」とコマンド「cls」の使い方
MongoDBのシェル(mongo / mongosh)を使っていると、実行したクエリや結果がどんどん積み重なり、画面が見づらくなることがあります。そんなときに便利なのがコンソールのクリア機能です。MongoDBでは、以下の2つの方法でコンソールをクリアできます。 方法1:キーボードショートカット「Ctrl + L」を使う 最も手軽なのが、キーボードショートカットを使う方法です。次のキーを押すだけで、即座にコンソールをクリアできます。 Ctrl + L このキーを押すと、それまで表示されていたログや実行結果がすべて消え、まっさらな状態になります。Linuxのターミナルなどと同じ操作感なので、