Node MongoDB驱动程序:无法通过整数id与驱动程序一起查找,但可以使用mongo shell

时间:2017-05-22 12:59:53

标签: node.js mongodb mongodb-query

我在使用findOne()的ID查询文档时遇到问题。文档将使用自定义自动递增的整数id写入shorts集合。得到的文件具有例如格式。 { "_id": 13, "fullURL": "google.com" }。当我尝试从集合中查询文档时,它返回null

// call queryUrlById(db, 13)
const queryUrlById = (db, id) => { 

  console.log(`searching id: ${id}`);

  return new Promise((resolve, reject) => {
    db.collection('shorts')
      .findOne({ _id: id })
      .then(found => {
        console.log(`Found: ${found}`);
        db.close();
        resolve(found.fullURL);
      })
      .catch(err => {
        db.close();
        reject(err);
      })
  });
};

// In console:
// searching id: 13
// Found: null

同时,mongo shell中的相同命令工作得很好:

> db.shorts.findOne({_id: 13})
{ "_id" : 13, "fullURL" : "google.com" }

到目前为止我尝试过的内容:

  1. 使用回调重写findOne()
  2. 将查询更改为{"_id": id}
  3. 其中没有一个像预期的那样成功。

2 个答案:

答案 0 :(得分:1)

如果您安装了mongodb软件包,则可以使用以下2行来运行查询

var mongo=require("mongodb").MongoClient;
var ObjectID=require("mongodb").ObjectId;

findOne函数的语法应如下:

db.collection("shorts").findOne({_id:ObjectID(id)});

答案 1 :(得分:1)

查询中的id需要从String转换为Number。

@str是第一个发布解决方案的人。谢谢大家!