MongoDB

MongoDBのfindの特殊な検索条件

More than 3 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