mongodb正则表达式不起作用

时间:2018-01-14 03:52:53

标签: regex mongodb

我知道,有很多类似的问题与mongodb正则表达式相关,包括:

在第一个问题中,据说try.mongodb.com有一个错误,使正则表达式不起作用。

在第二个问题和许多其他问题中,问题与错误的正则表达式格式有关。

我看到了问题,似乎我的问题有点不同(或者我可能会错过这里的一些内容)。

我尝试了什么

简而言之,这个有效:

> db.web_configs.find({key: 'cck'}).pretty();

但是,这一个:

> db.web_configs.find({key: "/cck/"}).pretty();

和这一个:

> db.web_configs.find({key: {$regex:"/cck/"}}).pretty();

不起作用。

我在自己的机器上尝试mongodb。所以,我想问题可能是mongodb的过时版本或错误的正则表达式模式。

我的mongodb版本是3.4.7,而最新版本是3.6。但我不确定这是不是问题。

有没有人知道这可能有什么问题呢?

此版本的mongodb是通过apt通过ubuntu存储库下载的。因此,除非有一个非常好的理由进行更新,否则我更愿意继续使用当前版本。

gofrendi@asgard:~$ mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
Server has startup warnings: 
2018-01-14T08:23:46.606+0700 I STORAGE  [initandlisten] 
2018-01-14T08:23:46.606+0700 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-01-14T08:23:46.606+0700 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2018-01-14T08:23:52.532+0700 I CONTROL  [initandlisten] 
2018-01-14T08:23:52.532+0700 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-01-14T08:23:52.532+0700 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2018-01-14T08:23:52.532+0700 I CONTROL  [initandlisten] 
> db.web_configs.find({key: 'cck'}).pretty();
> use chimera-web-app;
switched to db chimera-web-app
> db.web_configs.find({key: 'cck'}).pretty();
{
    "_id" : ObjectId("5a58bfc2516018595c8e6913"),
    "key" : "cck",
    "defaultConfig" : 1,
    "value" : "someValue"
}
> db.web_configs.find({key: "/cck/"}).pretty();
> db.web_configs.find({key: {$regex:"/cck/"}}).pretty();
> 

编辑:此问题已经解决(请查看评论)。简而言之,这一项工作:

> db.web_configs.find({key: /cck/}).pretty();
> db.web_configs.find({key: {$regex:/cck/}}).pretty();

另外,如果您使用NodeJ,如果您不知道表达式应该是regex对象而不是字符串,那么您很可能遇到同样的问题。

这个问题与这个问题有关:

Mongodb Nodejs Regex Query

2 个答案:

答案 0 :(得分:2)

也许,您忘记了没有将正则表达式用于单引号或双引号

这些是您可以使用正则表达式进行查询的几种方式

> db.web_configs.find({key: /cck/}).pretty();

> db.web_configs.find({key: /^cck$/}).pretty();

> db.web_configs.find({key: {$regex: "cck"}).pretty();

或编辑中的那个,

> db.web_configs.find({key: {$regex:/cck/}}).pretty();

希望使用$regex的最后两个语句中的引号和斜杠之间的区别是明确的。

答案 1 :(得分:1)

试试这个希望它会起作用。

db.web_configs..find({"key" : /^cck/}).pretty();