SQLのlike
クエリで何かをクエリしたい:
SELECT * FROM users WHERE name LIKE '%m%'
MongoDBで同じようにするにはどうすればよいですか?私はのための演算子を見つけることができませんlike
でのドキュメント。
SQLのlike
クエリで何かをクエリしたい:
SELECT * FROM users WHERE name LIKE '%m%'
MongoDBで同じようにするにはどうすればよいですか?私はのための演算子を見つけることができませんlike
でのドキュメント。
回答:
それはする必要があります:
db.users.find({"name": /.*m.*/})
または類似:
db.users.find({"name": /m/})
文字列の先頭に "m"がアンカーされているものではなく、どこかに "m"を含むもの(SQLの ' %
'演算子はRegexpの ' .*
' と同等)を探しています。
注: mongodbは、SQLの「LIKE」よりも強力な正規表現を使用します。正規表現を使用すると、想像するあらゆるパターンを作成できます。
正規表現の詳細については、このリンクを参照してください https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
LIKE
、SQLのクエリも同様です。
javascript db.users.find({ "name": { $regex: /m/i } })
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'
アウト:ペドロ
select name from users;
だけで、すべてのユーザーを一覧表示していますか?
に
できるよ:
db.users.find({'name': {'$regex': 'sometext'}})
%sometext%
db.users.find({'name': {'$regex': 'sometext', '$options': 'i'}})
PHPでは、次のコードを使用できます。
$collection->find(array('name'=> array('$regex' => 'm'));
$collection.where(field => {"$regex" => value})
mongoでは、そのために正規表現を使用します。
例えば: db.users.find({"name": /^m/})
すでに多くの答えがあります。正規表現を使用した文字列検索のさまざまな種類の要件とソリューションを提供しています。
いいねという単語を含む正規表現でできます。また$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)」のように使用できます。正規表現を使用できます。あなたが望むように。
楽しい!
使用している場合のNode.jsを、それはあなたがこれを書くことができると述べています:
db.collection.find( { field: /acme.*corp/i } );
//or
db.collection.find( { field: { $regex: 'acme.*corp', $options: 'i' } } );
また、これを書くことができます:
db.collection.find( { field: new RegExp('acme.*corp', 'i') } );
collection.where(field => Regexp.new(value))
すでに答えを得ましたが、正規表現を大文字と小文字を区別せずに一致させます
次のクエリを使用できます
db.users.find ({ "name" : /m/i } ).pretty()
i
中には/m/i
ケース非感受性を示し、.pretty()
よりきれいな出力を提供します
var search="feacebook"
@ The6thSens以下に設定するにはどうすればいいdb.users.find ({ "name" : /search/i } )
ですか?
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プロジェクトと使用マングースの使用クエリのように
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);
});
searchQuery.product_name = '/'+req.query.search.value+'/i';
searchQuery.product_name= {$regex: req.query.search.value, $options: 'i'};
if(req.query.search.value){ searchQuery.product_name = {$regex: req.query.search.value, $options: 'i'}; searchQuery.sale_amount = {$regex: req.query.search.value, $options: 'i'}; searchQuery.sale_person = {$regex: req.query.search.value, $options: 'i'}; searchQuery.department_name = {$regex: req.query.search.value, $options: 'i'}; searchQuery.sale_date = {$regex: req.query.search.value, $options: 'i'}; }
これが機能しない理由を確認できますか?
$regex: 'value'
検索値の正規表現を適切に生成し、大文字と小文字を区別しない$options: 'i'
ことを意味します。あなたが同じ別のプロパティの値と、その行為として使用するので、あなたのコードが働いていなかったし、自分のデータベースコレクションに満たしていなければならない条件を。
PHP mongo Likeの場合。
私はphp mongoのようないくつかの問題がありました。正規表現のparamsを連結すると、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)
変数でテンプレートリテラルを使用することもできます。
{"firstname": {$regex : `^${req.body.firstname}.*` , $options: 'si' }}
whereステートメントを使用して、JSスクリプトを作成できます。
db.myCollection.find( { $where: "this.name.toLowerCase().indexOf('m') >= 0" } );
リファレンス:http : //docs.mongodb.org/manual/reference/operator/where/
$where
非常に非効率的です。フルコレクションスキャンを実行します:(
正規表現は高価なプロセスです。
別の方法は、テキストのインデックスを作成し、を使用して検索すること$search
です。
検索可能にするフィールドのテキストインデックスを作成します。
db.collection.createIndex({name: 'text', otherField: 'text'});
テキストインデックスで文字列を検索します。
db.collection.find({
'$text'=>{'$search': "The string"}
})
Goとmgoドライバー:
Collection.Find(bson.M{"name": bson.RegEx{"m", ""}}).All(&result)
ここで、resultは、求められている型の構造体インスタンスです。
bson:RegEx{Pattern:"m", Options:"i"}
代わりに行う
以下のように正規表現マッチングを使用します。「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);
同様のクエリは以下のようになります
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" }
mongoで「いいね」検索が必要な場合は、このクエリを使用して$ regexを使用する必要があります。
db.product.find({name:{$regex:/m/i}})
詳細については、ドキュメントも読むことができます。https://docs.mongodb.com/manual/reference/operator/query/regex/
集計サブストリング検索を使用します(インデックス!!!):
db.collection.aggregate([{
$project : {
fieldExists : {
$indexOfBytes : ['$field', 'string']
}
}
}, {
$match : {
fieldExists : {
$gt : -1
}
}
}, {
$limit : 5
}
]);
{ "_id" : ObjectId("5aba5ad988385120a01b1ac2"), "fieldExists" : 4 }
文字列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、パルマー
MYSQLクエリをMongoDBに変換する無料のツールを見つけました。http://www.querymongo.com/ いくつかのクエリで確認しました。ほぼすべてが正しいことがわかるので。それによると、答えは
db.users.find({
"name": "%m%"
});
MongoRegexは非推奨になりました。
MongoDB \ BSON \ Regexを使用
$regex = new MongoDB\BSON\Regex ( '^m');
$cursor = $collection->find(array('users' => $regex));
//iterate through the cursor