MongoDB collection.findOne API没有响应

时间:2018-09-26 15:16:37

标签: javascript node.js mongodb express query-parameters

我正在将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()时,如果没有反斜杠,这两个结果都会被忽略,但是通过我的脚本,我必须删除查询对象内部的反斜杠。

1 个答案:

答案 0 :(得分:0)

您尝试过这样吗?

let v='I love to sit in A\/C';

db.myCollection.findOne({"Venue": /.v./})

How to query MongoDB with "like"?