Posted at

MongoDBのfindの特殊な検索条件

More than 5 years have passed since last update.

ちょっとつまずいたのでメモ。

findで子要素を検索する場合は、キー名をクォーテーションで囲って文字列にして指定します。


子要素を検索条件にする

例えば、taskコレクションが以下のようなドキュメント構造だった場合に、日曜日が有効(1)になっているタスクを検索したい場合。

{

"schedule_time": "07:30",
"schedule_week": {
"sun": 1,
"mon": 1,
"tue": 1,
"wed": 1,
"thu": 1,
"fri": 1,
"sat": 1
},
"title": "すごいがんばるタスク"
}

db.tasks.find({"schedule_week.sun": 1})     // OK

db.tasks.find({schedule_week.sun: 1}) // NG


子要素の配列の特定の位置を検索条件にする

例えば、taskコレクションが以下のようなドキュメント構造だった場合に、日曜日(配列は日から順)が有効(1)になっているタスクを検索したい場合。

{

"schedule_time": "08:00",
"schedule_week": [
1,
1,
1,
1,
1,
1,
1
],
"title": "すごいがんばるタスク2"
}

db.tasks.find({"schedule_week.0": 1})       // OK

db.tasks.find({schedule_week.0: 1}) // NG
db.tasks.find({"schedule_week[0]": 1}) // NG
db.tasks.find({schedule_week[0]: 1}) // NG