MongoDBで「like」演算子を使用して部分一致検索を行う方法
MongoDBで「like」でクエリする方法
MongoDBは、NoSQLデータベースとして広く利用されています。SQLとは異なり、独自のクエリ言語を使用します。
この解説では、MongoDBで「like」演算子を使用して部分一致検索を行う方法について、分かりやすく説明します。
「like」演算子は、文字列の一部と一致するドキュメントを見つけるために使用されます。
構文
db.collection.find({ field: { $like: /pattern/ } })
例
- 名前が "John" で始まるドキュメントを見つける
db.users.find({ name: { $like: /^John/ } })
- メールアドレスが "@example.com" で終わるドキュメントを見つける
db.users.find({ email: { $like: /@example.com$/ } })
db.users.find({ name: { $like: /^(John|Jane)$/ } })
オプション
- $i オプション: 大文字と小文字を区別せずに検索
db.users.find({ name: { $like: /john/i } })
- $regex オプション: 正規表現を使用
db.users.find({ name: { $regex: /^J[a-z]+$/ } })
補足
- 上記の例は、単純な部分一致検索を示しています。
- より複雑な検索を行う場合は、複数の演算子を組み合わせて使用できます。
// 接続
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
// データベースとコレクション
const dbName = 'test';
const collectionName = 'users';
// クエリ
const query = {
name: { $like: /^John/ }
};
// クエリ実行
MongoClient.connect(url, (err, client) => {
if (err) throw err;
const db = client.db(dbName);
const collection = db.collection(collectionName);
collection.find(query, (err, cursor) => {
if (err) throw err;
cursor.forEach((doc) => {
console.log(doc);
});
client.close();
});
});
このコードは、名前が "John" で始まるドキュメントをすべて検索し、結果を出力します。
const query = {
email: { $like: /@example.com$/ }
};
const query = {
name: { $like: /^(John|Jane)$/ }
};
MongoDBで部分一致検索を行うその他の方法
$regex オプション
「like」演算子よりも柔軟な検索を行う場合、正規表現を使用できます。
const query = {
name: { $regex: /^J[a-z]+$/ }
};
このクエリは、名前が "J" で始まり、その後26文字の小文字が続くドキュメントをすべて検索します。
全文検索を行う場合は、$text オプションを使用できます。
const query = { $text: { $search: "John" } };
このクエリは、"John" という単語を含むすべてのドキュメントを検索します。
検索する値のリストがある場合は、$in オプションを使用できます。
const query = {
name: { $in: ["John", "Jane"] }
};
JavaScript式を使用して、より複雑な検索を行うことができます。
const query = { $where: function() { return this.name.startsWith("John"); } };
sql mongodb mongodb-query