我想用SQL查询一些东西,比如查询:

SELECT * FROM users  WHERE name LIKE '%m%'

如何在MongoDB中实现这一点?我在文档中找不到这样的操作员。


当前回答

由于MongoDB外壳支持正则表达式,这是完全可能的。

db.users.findOne({"name" : /.*sometext.*/});

如果我们希望查询不区分大小写,可以使用“i”选项,如下所示:

db.users.findOne({"name" : /.*sometext.*/i});

其他回答

您可以在MongoDB中使用正则表达式。

例如

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结构,这样可读性更强。

如果使用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') } );

以下是使用“从”范例的命令:

db.customer.find({"customer_name" : { $regex : /^startswith/ }})

为了以防万一,有人正在寻找一种SQL LIKE类型的查询,以查找包含字符串数组而不是字符串的键,这里是:

db.users.find({"name": {$in: [/.*m.*/]}})