从mongodb查询的变量字符串中排除引号

时间:2014-09-29 05:05:34

标签: regex mongodb

我是一个mongodb新手,说过这个; 我得到一个用户输入字符串来执行"不包含" mongo查询。

这个正则表达式用" $ not"我应该这样做。

db.collection.find( { item: { $not: /STRING GOES HERE/ } } ) 

但问题是,因为我使用字符串连接来构成查询,所以查询看起来像这样(使用双引号正则表达式。) 即

db.collection.find( { "item": { "$not": "/theString/" } } )

当我用robomongo尝试时,我得到了

error: {
    "$err" : "Can't canonicalize query: BadValue $not needs a regex or a document",
    "code" : 17287
} 

当我手动排除正则表达式周围的双引号时,我得到了预期的输出。

我不知道我是否因为太多信息而过度复杂,请告诉我如何完成这项工作? 简单地说,如何使用Javascript排除正则表达式周围的双引号;还是有其他方法可以完成这项工作。

编辑:我正在使用nodejs和mongoose。

2 个答案:

答案 0 :(得分:3)

从字符串创建正则表达式时,您需要使用RegExp构造函数:

var str = 'theString';
db.collection.find( { "item": { "$not": new RegExp(str) } } )

答案 1 :(得分:1)

解决此问题的一种方法是,尽量不要使用字符串连接。

在调用Mongoose的Javascript中,创建一个Javascript对象作为查询,并按如下方式附加到其原型...

var query = {};
query.Item = {$not : "theString"};

将此传递给您的Mongoose模型。

例如,

youMongooseModel.find(query, function(err, result){});