我知道,有很多类似的问题与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
对象而不是字符串,那么您很可能遇到同样的问题。
这个问题与这个问题有关:
答案 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();