犬ターネット

MongoDB でカラムの文字数がnのドキュメントを検索

2015-09-03 mongodb

length を使う場合と、正規表現を使う場合の2パターンある。

以下のような collection があると仮定して、

{
 { "a" : "こんにちは" },
 { "a" : "私は" },
 { "a" : "元気です" },
 { "a" : "それでは" },
 { "a" : "さようなら" }
}

カラム a の文字数が「4」の document を検索する場合は以下のようにする。

> db.collection.find( {$where:"this.a.length===4"} );
{ "_id" : ObjectId("55e7d386062207b5b9dbff25"), "a" : "元気です" }
{ "_id" : ObjectId("55e7d391062207b5b9dbff26"), "a" : "それでは" }

> db.collection.find( { a : /\A.{4}\z/ } );
{ "_id" : ObjectId("55e7d386062207b5b9dbff25"), "a" : "元気です" }
{ "_id" : ObjectId("55e7d391062207b5b9dbff26"), "a" : "それでは" }

「4文字以上」って場合はこんな具合。

> db.collection.find( {$where:"this.a.length >= 4"} )
{ "_id" : ObjectId("55e7d36c062207b5b9dbff23"), "a" : "こんにちは" }
{ "_id" : ObjectId("55e7d386062207b5b9dbff25"), "a" : "元気です" }
{ "_id" : ObjectId("55e7d391062207b5b9dbff26"), "a" : "それでは" }
{ "_id" : ObjectId("55e7d543062207b5b9dbff27"), "a" : "さようなら" }

> db.collection.find( { a : /\A.{4,}\z/ } )
{ "_id" : ObjectId("55e7d36c062207b5b9dbff23"), "a" : "こんにちは" }
{ "_id" : ObjectId("55e7d386062207b5b9dbff25"), "a" : "元気です" }
{ "_id" : ObjectId("55e7d391062207b5b9dbff26"), "a" : "それでは" }
{ "_id" : ObjectId("55e7d543062207b5b9dbff27"), "a" : "さようなら" }

森ボーイシールを作った。あと今まで作ったシールやバッヂのまとめ

手紙を書く