繁体   English   中英

MongoDB-使用参数id的findOne导致空对象或错误

[英]MongoDB - findOne using the params id results in an empty object or an error

我正在通过构建一个简单的小应用程序来学习Express / Mongo(使用mLab),该应用程序可以创建客户列表和单个客户详细信息页面。

localhost:3000 / clients呈现“ 客户端 ”的整个集合

localhost:3000 / clients /:id应该通过id呈现特定的客户端

这是一个集合:来自MongoDB(mLab)的客户端输入示例:

{
    "_id": {
        "$oid": "57ba01d3ab462a0aeec66646"
    },
    "name": "ClientName",
    "address": {
        "street": "StreetName",
        "city": "Cityname",
        "state": "Statename",
        "zip": "1234"
    },
    "createDate": {
        "$date": "2016-08-21T19:32:35.525Z"
    }
}

我在/ clients页面上成功创建了一个href,其id值链接到特定的客户端:

<a href="/clients/<%= client._id %>"><%= client.name %></a>

正确地导致以下结果:

http://localhost:3000/clients/57ba01d3ab462a0aeec66646

这是我的/ clients /:id的 get函数:

app.get('/clients/:id', (req, res) => {
  db.collection('clients').findOne(req.params.id, (err, result) => {
    if (err) {
      handleError(res, err.message, "Failed to get clients.");
    } else {
      console.log(result);
      res.render('client.ejs', {client: result})
    }
  });
})

单击链接将导致以下错误:

MongoError:查询选择器必须是Function.MongoError.create(/Users/username/Desktop/node/node_modules/mongodb-core/lib/error.js:31:11)处的对象。

我整个下午一直在阅读和搜索,并尝试了大量不同的选择,例如:

我真的需要猫鼬吗? 这似乎是Mongo的基础工作-为什么它不起作用?

您需要使用一个对象: {id: req.params.id}

app.get('/clients/:id', (req, res) => {
  db.collection('clients').findOne({_id: req.params.id}, (err, result) => {
    if (err) {
      handleError(res, err.message, "Failed to get clients.");
    } else {
      console.log(result);
      res.render('client.ejs', {client: result})
    }
  });
})

您需要将req.params.id转换为MongoObject,然后使用它:

var id = new ObjectID(req.params.id);

也许像这样:

 db.collection('clients').findOne({"_id.$oid": req.params.id}, (err, result) =>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM