2014-09-29 64 views
1

我是一个mongodb新手, 我得到一个用户输入字符串来执行“不包含”mongo查询。从一个变量字符串中排除一个mongodb查询引号

这个“$ 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和猫鼬为此。

+0

什么语言? JavaScript的? – 2014-09-29 05:06:40

+0

是的。的JavaScript。 – 2014-09-29 05:10:48

回答

3

当创建从您需要使用RegExp构造函数的字符串正则表达式:解决此

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

我得到的只是一个空对象。任何想法为什么? 无法规范化查询:BadValue $不能为空 – 2014-09-29 06:16:46

+0

@DanDole听起来你可能在你的代码中有语法错误。你可以编辑你的问题,以显示你正在尝试? – JohnnyHK 2014-09-29 12:39:03

+0

是的,有一个语法错误。现在都好。 – 2014-10-01 05:53:30

1

一种方法是,尽量不要使用字符串连接。

在JavaScript上的猫鼬调用,创建一个Javascript对象作为查询和追加到它的原型如下...

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

它传递给你的猫鼬模型。

例如,

youMongooseModel.find(query, function(err, result){}); 
相关问题