私はSQLのlike
クエリで何かをクエリしたいです。
SELECT * FROM users WHERE name LIKE '%m%'
MongoDBで同じようにするにはどうすればいいですか? documentation にlike
の演算子が見つかりません。
それはする必要があります:
db.users.find({"name": /.*m.*/})
または類似:
db.users.find({"name": /m/})
どこかに "m"が含まれているもの(SQLの '%
'演算子はRegexpの '.*
'に相当)を探しているのではなく、 "m"が文字列の先頭に固定されているものではありません。
db.users.insert({name: 'paulo'})
db.users.insert({name: 'patric'})
db.users.insert({name: 'pedro'})
db.users.find({name: /a/}) //like '%a%'
アウト:パウロ、パトリック
db.users.find({name: /^pa/}) //like 'pa%'
アウト:パウロ、パトリック
db.users.find({name: /ro$/}) //like '%ro'
アウト:ペドロ
に
できるよ:
db.users.find({'name': {'$regex': 'sometext'}})
PHPでは、次のコードを使用できます。
$collection->find(array('name'=> array('$regex' => 'm'));
あなたはそのために正規表現を使うことになるでしょう。
例:db.users.find({"name": /^m/})
すでにたくさんの答えがあります。正規表現を使用した文字列検索のためのさまざまな種類の要件と解決策を示しています。
あなたはWordを含む正規表現でそれをすることができますすなわち好きです。大文字と小文字を区別しない検索にも$options => i
を使用できます
string
が含まれています
db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})
正規表現のみでstring
を含みません
db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})
大文字と小文字を区別しないstring
db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})
string
で始める
db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})
string
で終わる
db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})
これ をブックマークとして保管し、必要に応じてその他の変更を加えてください。
2つの選択肢があります。
db.users.find({"name": /string/})
または
db.users.find({"name": {"$regex": "string", "$options": "i"}})
2番目に、大文字と小文字を区別しない使用を見つけるためのオプションの "i"のように、より多くのオプションがあります。そして "string"については、例えば ". string。 "(%string%)、または "string。*"(string%)と "。* string)(%string)のように使えます。あなたが望むように正規表現を使用することができます。
楽しい!
すでに正解を得ましたが、正規表現を大文字と小文字を区別しません。
あなたは次のクエリを使用することができます
db.users.find ({ "name" : /m/i } ).pretty()
/m/i
のi
は大文字と小文字を区別しないことを示し、.pretty()
はよりきれいな出力を提供します
Node.jsのマングース用
db.users.find({'name': {'$regex': '.*sometext.*'}})
PHP mongoが好きです。
php mongoにはいくつかの問題があります。正規表現のパラメータを連結すると、状況によっては役に立つことがわかりました PHP mongo findフィールドは で始まります。私はもっと人気のあるスレッドに貢献するためにここに投稿するだろうと考えました
例えば
db()->users->insert(['name' => 'john']);
db()->users->insert(['name' => 'joe']);
db()->users->insert(['name' => 'jason']);
// starts with
$like_var = 'jo';
$prefix = '/^';
$suffix = '/';
$name = $prefix . $like_var . $suffix;
db()->users->find(['name' => array('$regex'=>new MongoRegex($name))]);
output: (joe, john)
// contains
$like_var = 'j';
$prefix = '/';
$suffix = '/';
$name = $prefix . $like_var . $suffix;
db()->users->find(['name' => array('$regex'=>new MongoRegex($name))]);
output: (joe, john, jason)
2.6 mongodbの新機能を使うことができます。
db.foo.insert({desc: "This is a string with text"});
db.foo.insert({desc:"This is a another string with Text"});
db.foo.ensureIndex({"desc":"text"});
db.foo.find({
$text:{
$search:"text"
}
});
nodejs projectでmongoose use query同様を使用します。
var User = mongoose.model('User');
var searchQuery={};
searchQuery.email = req.query.email;
searchQuery.name = {$regex: req.query.name, $options: 'i'};
User.find(searchQuery, function(error, user) {
if(error || user === null) {
return res.status(500).send(error);
}
return res.status(200).send(user);
});
SQLでは、 ' like 'クエリは次のようになります。
select * from users where name like '%m%'
MongoDBコンソールでは、次のようになります。
db.users.find({"name": /m/}) // Not JSON formatted
db.users.find({"name": /m/}).pretty() // JSON formatted
さらにpretty()
メソッドは、読みやすいフォーマット化されたJSON構造を生成するすべての場所で使います。
MongoDB Compassでは、次のように厳密モードの構文を使用する必要があります。
{ "text": { "$regex": "^Foo.*", "$options": "i" } }
(MongoDB Compassでは、"
の代わりに'
を使うことが重要です)
以下のように一致する正規表現を使用してください。 'i'は大文字と小文字を区別しません。
var collections = mongoDatabase.GetCollection("Abcd");
var queryA = Query.And(
Query.Matches("strName", new BsonRegularExpression("ABCD", "i")),
Query.Matches("strVal", new BsonRegularExpression("4121", "i")));
var queryB = Query.Or(
Query.Matches("strName", new BsonRegularExpression("ABCD","i")),
Query.Matches("strVal", new BsonRegularExpression("33156", "i")));
var getA = collections.Find(queryA);
var getB = collections.Find(queryB);
囲碁とmgoドライバの場合:
Collection.Find(bson.M{"name": bson.RegEx{"m", ""}}).All(&result)
ここでresultは求められた型の構造体インスタンスです
Where文を使用して任意のJSスクリプトを作成できます。
db.myCollection.find( { $where: "this.name.toLowerCase().indexOf('m') >= 0" } );
参照: http://docs.mongodb.org/manual/reference/operator/where/
正規表現は高価ですプロセスです。
もう1つの方法は、テキストの索引を作成してから$search
を使用してそれを検索することです。
検索可能にしたいフィールドのテキストインデックスを作成します。
db.collection.createIndex({name: 'text', otherField: 'text'});
テキストインデックスで文字列を検索します。
db.collection.find({
'$text'=>{'$search': "The string"}
})
クエリは以下のようになります。
db.movies.find({title: /.*Twelve Monkeys.*/}).sort({regularizedCorRelation : 1}).limit(10);
scalaの場合 ReactiveMongo api、
val query = BSONDocument("title" -> BSONRegex(".*"+name+".*", "")) //like
val sortQ = BSONDocument("regularizedCorRelation" -> BSONInteger(1))
val cursor = collection.find(query).sort(sortQ).options(QueryOpts().batchSize(10)).cursor[BSONDocument]
Javascriptの/regex_pattern/
パターンとmongoの{'$regex': 'regex_pattern'}
パターンの両方を使用する理由があるようです。参照先: MongoBD RegEx構文の制限事項
これは完全なRegExチュートリアルではありませんが、 の上で/ - 非常に投票されたあいまいな投稿を見た後にこれらのテストを実行するように促されました 。
> ['abbbb','bbabb','bbbba'].forEach(function(v){db.test_collection.insert({val: v})})
> db.test_collection.find({val: /a/})
{ "val" : "abbbb" }
{ "val" : "bbabb" }
{ "val" : "bbbba" }
> db.test_collection.find({val: /.*a.*/})
{ "val" : "abbbb" }
{ "val" : "bbabb" }
{ "val" : "bbbba" }
> db.test_collection.find({val: /.+a.+/})
{ "val" : "bbabb" }
> db.test_collection.find({val: /^a/})
{ "val" : "abbbb" }
> db.test_collection.find({val: /a$/})
{ "val" : "bbbba" }
> db.test_collection.find({val: {'$regex': 'a$'}})
{ "val" : "bbbba" }
Spring-Data Mongodbを使用している場合これを次のようにして実行できます。
String tagName = "m";
Query query = new Query();
query.limit(10);
query.addCriteria(Criteria.where("tagName").regex(tagName));
Mongo Shellが正規表現をサポートしているので、それは完全に可能です。
db.users.findOne({"name" : /.*sometext.*/});
クエリで大文字と小文字を区別しない場合は、次のように "i"オプションを使用できます。
db.users.findOne({"name" : /.*sometext.*/i});
あなたがmongoで「いいね」の検索をしたいのなら、このクエリを使って$ regexで行くべきです。
db.product.find({name:{$regex:/m/i}})
より多くのためにあなたは同様にドキュメンテーションを読むことができます。 https://docs.mongodb.com/manual/reference/operator/query/regex/
私はMYSQLクエリをMongoDBに翻訳するための無料ツールを見つけました。 http://www.querymongo.com/ /私はいくつかの質問で調べた。私が見るようにほとんどすべてが正しいです。それによると、答えは
db.users.find({
"name": "%m%"
});
集約サブストリング検索を使用します(索引は!!!)。
db.collection.aggregate([{
$project : {
fieldExists : {
$indexOfBytes : ['$field', 'string']
}
}
}, {
$match : {
fieldExists : {
$gt : -1
}
}
}, {
$limit : 5
}
]);
変数でテンプレートリテラルを使うこともできます:
{"firstname": {$regex : `^${req.body.firstname}.*` , $options: 'si' }}
MongoRegexは廃止予定です。
MongoDB\BSON\Regexを使用
$regex = new MongoDB\BSON\Regex ( '^m');
$cursor = $collection->find(array('users' => $regex));
//iterate through the cursor
db.customer.find({"customerid": {"$regex": "CU_00000*", "$options": "i"}}).pretty()
文字列パターンを検索するときは、大文字と小文字の区別がわからないときに常に上記のパターンを使用することをお勧めします。それが役立つことを願っています!
2つの日付の間のステータス==「保留中」の「last」のようなフルネーム:
db.orders.find({
createdAt:{$gt:ISODate("2017-04-25T10:08:16.111Z"),
$lt:ISODate("2017-05-05T10:08:16.111Z")},
status:"Pending",
fullName:/last/}).pretty();
status == 'Pending'およびorderIdのように 'PHA876174':
db.orders.find({
status:"Pending",
orderId:/PHA876174/
}).pretty();
>> db.car.distinct('name')
[ "honda", "tat", "tata", "tata3" ]
>> db.car.find({"name":/. *ta.* /})
次のようにワイルドカードフィルタを使用することもできます。
{"query": { "wildcard": {"lookup_field":"search_string*"}}}
必ず*
を使用してください。
String Deepakparmar、Dipak、Parmar
db.getCollection('yourdb').find({"name":/^dee/})
ans deepakparmar
db.getCollection('yourdb').find({"name":/d/})
ans deepakparmar、dipak
db.getCollection('yourdb').find({"name":/mar$/})
ans deepakparmar、dipak、parmar
PHPを使用している場合は、以下のように MongoDB_DataObject wrapperを使用できます。
$model = new MongoDB_DataObject();
$model->query("select * from users where name like '%m%'");
while($model->fetch()) {
var_dump($model);
}
または:
$model = new MongoDB_DataObject('users);
$model->whereAdd("name like '%m%'");
$model->find();
while($model->fetch()) {
var_dump($model);
}