MongoDB(9) - 検索編(2回目)

今回は条件を指定した検索を行います。

サンプルデータ

次のようなデータがcol1コレクションに設定されています。

nameage
岡田30
山岡35
鈴木24

完全一致検索、部分一致検索

完全一致検索と部分一致検索を行います。

[Mongoシェル]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 完全一致検索
> db.col1.find({name:"岡田"})
{ "_id" : ObjectId("6120958fdee0a016235653f8"), "name" : "岡田", "age" : 30 }

# 部分一致検索
> db.col1.find({name:/岡/})
{ "_id" : ObjectId("6120958fdee0a016235653f8"), "name" : "岡田", "age" : 30 }
{ "_id" : ObjectId("6120958fdee0a016235653f9"), "name" : "山岡", "age" : 35 }

# 前方一致検索
> db.col1.find({name:/^岡/})
{ "_id" : ObjectId("6120958fdee0a016235653f8"), "name" : "岡田", "age" : 30 }

# 後方一致検索
> db.col1.find({name:/岡$/})
{ "_id" : ObjectId("6120958fdee0a016235653f9"), "name" : "山岡", "age" : 35 }

範囲指定検索

範囲を指定した検索を行います。

[Mongoシェル]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 30以下
> db.col1.find({age:{$lte:30}})
{ "_id" : ObjectId("6120958fdee0a016235653f8"), "name" : "岡田", "age" : 30 }
{ "_id" : ObjectId("6120958fdee0a016235653fa"), "name" : "鈴木", "age" : 24 }

# 30未満
> db.col1.find({age:{$lt:30}})
{ "_id" : ObjectId("6120958fdee0a016235653fa"), "name" : "鈴木", "age" : 24 }

# 30以上
> db.col1.find({age:{$gte:30}})
{ "_id" : ObjectId("6120958fdee0a016235653f8"), "name" : "岡田", "age" : 30 }
{ "_id" : ObjectId("6120958fdee0a016235653f9"), "name" : "山岡", "age" : 35 }

# 30より大きい
> db.col1.find({age:{$gt:30}})
{ "_id" : ObjectId("6120958fdee0a016235653f9"), "name" : "山岡", "age" : 35 }

# 27以上32以下
> db.col1.find({age:{$gte:27,$lte:32}})
{ "_id" : ObjectId("6120958fdee0a016235653f8"), "name" : "岡田", "age" : 30 }

Pythonで操作

上記の操作をPythonで行うと、次のようになります。

[ソースコード]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from pymongo import MongoClient

# MongoDB操作用のインスタンスを作成
client = MongoClient() # [IPとポートを指定する場合] MongoClient('10.200.243.203', 27017')

# データベースの取得
db1 = client.db1

# 完全一致検索
for doc in db1.col1.find({'name':'岡田'}):
print(doc)

# 部分一致検索
for doc in db1.col1.find({'name':{'$regex':'岡'}}):
print(doc)

# 前方一致検索
for doc in db1.col1.find({'name':{'$regex':'^岡'}}):
print(doc)

# 後方一致検索
for doc in db1.col1.find({'name':{'$regex':'岡$'}}):
print(doc)
#---------------------------------------------------
# 30以下
for doc in db1.col1.find({'age':{'$lte':30}}):
print(doc)

# 30未満
for doc in db1.col1.find({'age':{'$lt':30}}):
print(doc)

# 30以上
for doc in db1.col1.find({'age':{'$gte':30}}):
print(doc)

# 30より大きい
for doc in db1.col1.find({'age':{'$gt':30}}):
print(doc)

# 27以上32以下
for doc in db1.col1.find({'age':{'$gte':27, '$lte':32}}):
print(doc)

次回はAND条件やOR条件での検索を行います。