我正在将MongoDB nodeJS驱动程序用于MongoDB数据库。
尝试使用collection.findOne()
和查询对象从数据库中获取单个结果。
执行后,脚本会给我null
响应。但是,如果从mongo shell执行相同的操作,则会给我一个文档的响应。
下面是向数据库查询的代码示例。
construct(venue) {
console.log(venue) /* prints -> I love to sit in A\/C */
let promise = new Promise((resolve, reject)=>{
myCollection.findOne({
"Venue": venue
})
.then( r => {
if(r == null) {
throw new Error("Venue name dose not exits in the response");
} else {
resolve(r.VenueCode)
}
})
}
return promise;
}
venue
是我从请求URL解析查询参数后得到的变量。
let venue = req.query.venue;
仅当venue
变量中有一个'\'字符时,这种情况才会发生。
例如:
I love to sit in A\/C (dose not work! null result)
I love AC ( works fine)
同一字符串(带有反斜杠)在mongo shell中起作用。
db.myCollection.find({"Venue":"I love to sit in A\/C"}).pretty()
{
"_id" : ObjectId("5babsdf92f2c5082d5f478aebfa"),
"VenueCode" : "ABCD",
"Venue" : "I love to sit in A/C ",
"list" : "9999"
}
更新:
感谢 @TimaGegewepe 。从venue
变量中删除backslah确实解决了我的问题。
但是,还有一件事尚不清楚-当我通过另一个脚本将数据插入到modgoDB时,它在插入文档中带有反斜杠。在mongo shell内,当我使用包含反斜杠的查询执行find()时,如果没有反斜杠,这两个结果都会被忽略,但是通过我的脚本,我必须删除查询对象内部的反斜杠。
答案 0 :(得分:0)
您尝试过这样吗?
let v='I love to sit in A\/C';
db.myCollection.findOne({"Venue": /.v./})