我想用SQL查询一些东西,比如查询:
SELECT * FROM users WHERE name LIKE '%m%'
如何在MongoDB中实现这一点?我在文档中找不到这样的操作员。
我想用SQL查询一些东西,比如查询:
SELECT * FROM users WHERE name LIKE '%m%'
如何在MongoDB中实现这一点?我在文档中找不到这样的操作员。
当前回答
在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外壳支持正则表达式,这是完全可能的。
db.users.findOne({"name" : /.*sometext.*/});
如果我们希望查询不区分大小写,可以使用“i”选项,如下所示:
db.users.findOne({"name" : /.*sometext.*/i});
这必须是:
db.users.find({"name": /.*m.*/})
或类似:
db.users.find({"name": /m/})
您正在查找某个地方包含“m”的内容(SQL的“%”运算符相当于正则表达式“.*”),而不是在字符串开头锚定了“m”。
注意:MongoDB使用的正则表达式比SQL中的“LIKE”更强大。使用正则表达式,您可以创建任何您想象的模式。
有关正则表达式的详细信息,请参阅正则表达式(MDN)。
还可以按如下方式使用通配符过滤器:
{"query": { "wildcard": {"lookup_field":"search_string*"}}}
请务必使用*。
为了以防万一,有人正在寻找一种SQL LIKE类型的查询,以查找包含字符串数组而不是字符串的键,这里是:
db.users.find({"name": {$in: [/.*m.*/]}})
您已经得到了答案,但要匹配不区分大小写的正则表达式,可以使用以下查询:
db.users.find ({ "name" : /m/i } ).pretty()
/m/i中的i表示不区分大小写,.pretty()提供了更漂亮的输出。