我想用SQL查询一些东西,比如查询:
SELECT * FROM users WHERE name LIKE '%m%'
如何在MongoDB中实现这一点?我在文档中找不到这样的操作员。
我想用SQL查询一些东西,比如查询:
SELECT * FROM users WHERE name LIKE '%m%'
如何在MongoDB中实现这一点?我在文档中找不到这样的操作员。
当前回答
>> db.car.distinct('name')
[ "honda", "tat", "tata", "tata3" ]
>> db.car.find({"name":/. *ta.* /})
其他回答
这必须是:
db.users.find({"name": /.*m.*/})
或类似:
db.users.find({"name": /m/})
您正在查找某个地方包含“m”的内容(SQL的“%”运算符相当于正则表达式“.*”),而不是在字符串开头锚定了“m”。
注意:MongoDB使用的正则表达式比SQL中的“LIKE”更强大。使用正则表达式,您可以创建任何您想象的模式。
有关正则表达式的详细信息,请参阅正则表达式(MDN)。
Use:
const indexSearch = await UserModel.find(
{ $text: { $search: filter } },
);
if (indexSearch.length) {
return indexSearch;
}
return UserModel.find(
{
$or: [
{ firstName: { $regex: `^${filter}`, $options: 'i' } },
{ lastName: { $regex: `^${filter}`, $options: 'i' } },
{ middleName: { $regex: `^${filter}`, $options: 'i' } },
{ email: { $regex: `^${filter}`, $options: 'i' } },
],
},
);
我使用了正则表达式和“索引”的组合。
字符串yourdb={deepakparmar,dipak,parmar}
db.getCollection('yourdb').find({"name":/^dee/})
ans deepakparmar公司
db.getCollection('yourdb').find({"name":/d/})
ans deepakparmar,迪帕克
db.getCollection('yourdb').find({"name":/mar$/})
ans deepakparmar,帕尔马
在Node.js项目中,使用Mongoose,使用类似的查询:
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);
});
查找结果的一种方法相当于类似查询:
db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})
其中i用于不区分大小写的提取数据。
我们还可以通过另一种方式获得结果:
db.collection.find({"name":/aus/})
上面将提供名称中包含aus的结果。