【发布时间】:2016-12-28 09:09:56
【问题描述】:
我正在通过构建一个简单的小应用程序来学习 Express/Mongo(使用 mLab),我可以创建一个客户列表和一个客户详细信息页面。
localhost:3000/clients 呈现 'clients' 的整个集合
localhost:3000/clients/:id 应该通过 id 呈现特定的客户端
这是一个集合:clients 来自 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) 在 Collection.find [...]
我整个下午都在阅读和搜索,并尝试了很多不同的选项,例如:
- '您需要创建一个 ObjectID':https://stackoverflow.com/a/10929670
- '您需要使用 Mongoose 来创建 ObjectID':https://stackoverflow.com/a/30652361
我真的需要猫鼬吗?这似乎是 Mongo 的基础——为什么它不起作用?
【问题讨论】:
-
这可能是重复的,但由于我不知道我在做什么,所以我不熟悉关于该问题的查询是以 json 的形式:
{ "_id": { "$in": [ { "$oid": "54651022bffebc03098b4567" }, { "$oid": "54651022bffebc03098b4568" } ] } }跨度> -
您的过滤条件应该是:{"_id": { "$oid": req.params.id}}。问题是您使用的是 $oid 而不是普通的普通 ObjectId。
-
它正在慢慢下沉:/。但是,当我添加您概述的内容时,我遇到了一个严重的错误:
db.collection('clients').findOne({"_id": { "$oid": req.params.id}}, (err, result) => {[...] -
^ 结果为:
{"error":"Failed to get clients."}
标签: javascript node.js mongodb express