我是一个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。
答案 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){});