ちょっとつまずいたのでメモ。
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