mongoDB フィールド値が存在するデータを取得する

mongoDB フィールド値が存在するデータを取得する

mongoDBで、フィールド値が存在するデータを取得する手順を記述してます。「$exists」に「true」を指定することで取得できます。実際に実行した結果も記載してます。

環境

  • OS CentOS Stream release 9
  • MongoDB 6.0.2

手順

フィールド値が存在するデータを取得するには、「$exists:true」を使用します。

db.コレクション名.find( {フィールド名: {$exists:true}} )

実際に、以下のデータベース「hoge」にある「foo」というコレクション(テーブル)のドキュメント(レコード)を使用して動作を確認してみます。

> use hoge

> db.foo.find()

[
  {
    _id: ObjectId("6364ae7f06a29c57f191d1b7"),
    name: 'itiro',
    age: 10,
    gender: 'm'
  },
  {
    _id: ObjectId("6364ae7f06a29c57f191d1b8"),
    name: 'jiro',
    age: 20,
    gender: 'm'
  },
  {
    _id: ObjectId("6364ae7f06a29c57f191d1b9"),
    name: 'saburo',
    age: 30,
    gender: 'm',
    address: 'tokyo'
  },
  {
    _id: ObjectId("6364ae7f06a29c57f191d1ba"),
    name: 'jiro',
    age: 25,
    gender: 'f'
  },
  {
    _id: ObjectId("6364ae7f06a29c57f191d1bb"),
    name: 'jiro',
    age: 30,
    gender: 'x'
  }
]

「address」というフィールドだけがあるデータを表示してみます。

> db.foo.find( {address: {$exists:true}} )

[
  {
    _id: ObjectId("6364ae7f06a29c57f191d1b9"),
    name: 'saburo',
    age: 30,
    gender: 'm',
    address: 'tokyo'
  }
]

取得されていることが、確認できます。

falseを指定

「false」を指定すると存在しないデータだけが取得できます。

> db.foo.find( {address: {$exists:false}} )

[
  {
    _id: ObjectId("6364ae7f06a29c57f191d1b7"),
    name: 'itiro',
    age: 10,
    gender: 'm'
  },
  {
    _id: ObjectId("6364ae7f06a29c57f191d1b8"),
    name: 'jiro',
    age: 20,
    gender: 'm'
  },
  {
    _id: ObjectId("6364ae7f06a29c57f191d1ba"),
    name: 'jiro',
    age: 25,
    gender: 'f'
  },
  {
    _id: ObjectId("6364ae7f06a29c57f191d1bb"),
    name: 'jiro',
    age: 30,
    gender: 'x'
  }
]