如何在MongoDB的查询中使用正则expression式variables

我想基于我构造的正则expression式来查询MongoDB的文档。 例如,我已经构build了一个简单的正则expression式,如下所示,它是Nodejs中随机数字和随机数字的组合

var randnum = Math.floor((Math.random() * 10) + 1); var alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Y','Z']; var randletter = alpha[Math.floor(Math.random() * alpha.length)]; var val = randletter + randnum + '.*; 

我曾尝试各种组合的正则expression式variables

 var stream = collection.find({"FirstName": /val/).stream(); && var stream = collection.find({"FirstName": /$val/).stream(); && var stream = collection.find({"FirstName": {$in : [{$regex:val}]}}).stream() && var stream = collection.find({"FirstName": {$in : [{$regex:$val}]}}).stream() 

没有它似乎工作。 但是,当我写实际的正则expression式时,我得到例如的logging

 var stream = collection.find({"FirstName": /J.*/).stream(); 

任何帮助将不胜感激。

谢谢Ganesh

您需要使用RegExp构造函数从string中创build正则expression式对象,因为/.../语法仅用于文字。

 var stream = collection.find({"FirstName": new RegExp(val)}).stream(); 

如果要使用variablesval作为查询部分的参数,则可以使用$ regex ,例如:

 collection.find({"FirstName": {$regex:val}}) 

根据手册,不允许在$ in操作符中放置$ regex

如果要在$ in运算符中放置正则expression式对象,则必须使用JavaScript正则expression式对象,例如:

 collection.find({"FirstName": {$in: [/abc/, /123/]}}) 

顺便说一下, val in /val/是常量string,而不是你上面定义的variables。