Вы также можете использовать Bridge.net. Начиная с версии 1.7, он поддерживает создание определений типа Type для типов C #. См. http://bridge.net/docs/generate-typescript-definitions/
Это должно быть:
db.users.find({"name": /.*m.*/})
или, похоже:
db.users.find({"name": /m/})
Вы ищете что-то, что содержит «m» где-нибудь (SQL '%
'эквивалентен Regexp's' .*
'), а не то, что имеет «m», привязанное к началу строки.
Используйте регулярные выражения, как показано ниже. «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);
MongoRegex устарел. Использовать MongoDB \ BSON\regex
$regex = new MongoDB\BSON\Regex ( '^m');
$cursor = $collection->find(array('users' => $regex));
//iterate through the cursor
Для Mongoose в Node.js
db.users.find({'name': {'$regex': '.*sometext.*'}})
Если вы используете PHP, вы можете использовать обертку MongoDB_DataObject , как показано ниже:
$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);
}
Вы можете использовать новую функцию 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"
}
});
Кажется, что есть причины использовать как шаблон javascript /regex_pattern/
, так и шаблон mongo {'$regex': 'regex_pattern'}
. См. Также: Ограничения синтаксиса RegGrange MongoBD
Это не полный учебник 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" }
Вы можете использовать инструкцию where для построения любого скрипта JS:
db.myCollection.find( { $where: "this.name.toLowerCase().indexOf('m') >= 0" } );
Ссылка: http://docs.mongodb.org/manual/reference/operator/where/
$where
крайне неэффективен. Сделайте полную проверку коллекции :(
– Sushant Gupta
23 September 2013 в 16:23
С MongoDB Compass вам нужно использовать синтаксис строгого режима, как таковой:
{ "text": { "$regex": "^Foo.*", "$options": "i" } }
(В MongoDB Compass важно, чтобы вы использовали "
вместо '
)
Если вы используете 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))
– Donny Kurnia
16 April 2014 в 00:45
Если вы хотите, чтобы поиск «Like» в mongo, вы должны пойти с $ regex, используя этот запрос, будет
db.product.find({name:{$regex:/m/i}})
, поскольку вы можете прочитать документацию как Что ж. https://docs.mongodb.com/manual/reference/operator/query/regex/
Вы использовали бы регулярное выражение для этого в mongo.
например: db.users.find({"name": /^m/})
В
вы можете сделать:
db.users.find({'name': {'$regex': 'sometext'}})
db.users.find({'name': {'$regex': 'sometext', '$options': 'i'}})
– sumowrestler
14 July 2017 в 00:09
bson.M{"technician", bson.RegEx{Pattern: tech}}
вместо этого (но убедитесь, что tech
был дезинфицирован или у вас есть уязвимость в отношении регулярного выражения!)
– kbolino
20 March 2018 в 22:02
Использовать поиск подстроки агрегирования (с индексом !!!):
db.collection.aggregate([{
$project : {
fieldExists : {
$indexOfBytes : ['$field', 'string']
}
}
}, {
$match : {
fieldExists : {
$gt : -1
}
}
}, {
$limit : 5
}
]);
{ "_id" : ObjectId("5aba5ad988385120a01b1ac2"), "fieldExists" : 4 }
– Gianfranco P.
27 March 2018 в 15:14
Я нашел бесплатный инструмент для перевода запросов MYSQL в MongoDB. http://www.querymongo.com/ Я проверил несколько запросов. как я вижу, почти все они верны. В соответствии с этим, ответ
db.users.find({
"name": "%m%"
});
В 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, которая более читаема.
В PHP вы можете использовать следующий код:
$collection->find(array('name'=> array('$regex' => 'm'));
$collection.where(field => {"$regex" => value})
– Donny Kurnia
16 April 2014 в 00:40
Подобно Query, как показано ниже
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]
db.customer.find({"customerid": {"$regex": "CU_00000*", "$options": "i"}}).pretty()
Когда мы ищем строковые шаблоны, всегда лучше использовать приведенный выше шаблон, как если бы мы не были уверены в случае. Надеюсь, что это поможет !!!
db.users.insert({name: 'paulo'})
db.users.insert({name: 'patric'})
db.users.insert({name: 'pedro'})
db.users.find({name: /a/}) //like '%a%'
out: paulo, patric
db.users.find({name: /^pa/}) //like 'pa%'
out: paulo, patric
db.users.find({name: /ro$/}) //like '%ro'
out: pedro
select name from users;
, который просто перечисляет всех пользователей?
– anon58192932
18 October 2017 в 19:15
В проекте nodejs и использовании mongoose use Подобно запросу
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';
– Muhammad Shahzad
10 May 2016 в 17:01
searchQuery.product_name= {$regex: req.query.search.value, $options: 'i'};
– Shaishab Roy
10 May 2016 в 18:59
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'}; }
можете ли вы посмотреть, почему это не работает?
– Muhammad Shahzad
11 May 2016 в 16:39
$regex: 'value'
генерирует регулярное выражение для вашего значения поиска, а $options: 'i'
означает регистр, нечувствительный к регистру . Ваш код не работал, потому что вы использовали одно и то же значение для другого свойства и которые действуют как условие и , которое не должно выполняться с вашей коллекцией баз данных.
– Shaishab Roy
12 May 2016 в 07:36
FullName как «последний» со статусом == «Ожидание» между двумя датами:
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 == 'Ожидание' и orderId LIKE 'PHA876174':
db.orders.find({
status:"Pending",
orderId:/PHA876174/
}).pretty();
Есть уже много ответов. Я даю разные типы требований и решений для поиска строк с регулярным выражением.
Вы можете делать с регулярным выражением, которое содержит слово i.e. Также вы можете использовать $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'}})
Сохранить this в качестве закладки и ссылку на любые другие изменения, которые могут вам понадобиться.
В качестве регулярного выражения поддержки Mongo shell это вполне возможно.
db.users.findOne({"name" : /.*sometext.*/});
Если мы хотим, чтобы запрос был нечувствительным к регистру, мы можем использовать опцию «i», как показано ниже:
db.users.findOne({"name" : /.*sometext.*/i});
У вас уже есть ответы, но для соответствия регулярному выражению с нечувствительностью к регистру
Вы можете использовать следующий запрос
db.users.find ({ "name" : /m/i } ).pretty()
i
в /m/i
указывает на нечувствительность к регистру и .pretty()
обеспечивает более симпатичный вывод
В Go и драйвер mgo:
Collection.Find(bson.M{"name": bson.RegEx{"m", ""}}).All(&result)
, где результатом является экземпляр структуры искомого типа
bson:RegEx{Pattern:"m", Options:"i"}
– bithavoc
13 November 2016 в 18:33
Regex - дорогостоящий процесс.
Другой способ - создать индекс текста, а затем выполнить поиск с помощью $search
.
Создать текст. Индекс полей, которые вы хотите сделать доступными для поиска:
db.collection.createIndex({name: 'text', otherField: 'text'});
Поиск строки в текстовом индексе:
db.collection.find({
'$text'=>{'$search': "The string"}
})
У вас есть 2 варианта:
db.users.find({"name": /string/})
или
db.users.find({"name": {"$regex": "string", "$options": "i"}})
Во втором случае у вас есть больше опций, например «i» в параметрах, которые можно найти с использованием регистрозависимой чувствительности. И о «строке» вы можете использовать строку «. . » (% string%) или «строка. *» (Строка%) и строка «. *) (% String) для Например, вы можете использовать регулярное выражение, как хотите.
Наслаждайтесь!
Если вы используете Spring-Data Mongodb, вы можете сделать это следующим образом:
String tagName = "m";
Query query = new Query();
query.limit(10);
query.addCriteria(Criteria.where("tagName").regex(tagName));
Для PHP mongo Нравится. У меня было несколько вопросов с php mongo. Я обнаружил, что объединение некоторых параметров regex помогает в некоторых ситуациях Поле поиска PHP mongo начинается с . Я полагал, что буду публиковать здесь, чтобы внести вклад в более популярную нить
, например
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)
LIKE
в SQL. – Emily 26 July 2010 в 19:50javascript db.users.find({ "name": { $regex: /m/i } })
– Doron Segal 19 June 2015 в 03:24