mongoDB集合包含以下数据
db.stack.find()
{ "_id" : "8GieRu" }
Run Code Online (Sandbox Code Playgroud)
_id不是12字节的单个字符串,
根据[ObjectID] [1]的MongoDB文档,id(字符串) - 可以是24字节的十六进制字符串,12字节的二进制字符串或数字.
使用Mongoose,可以使用此Json访问此集合
{"_id" : new mongoose.Types.ObjectId("8GieRu")}
Run Code Online (Sandbox Code Playgroud)
并抛出以下错误
/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js:35
throw new Error("Argument passed in must be a single String of 12 bytes or
^
Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
at new ObjectID (/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js:35:11)
[1]: http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html
Run Code Online (Sandbox Code Playgroud)
Mongoose严格检查固定长度的ObjectId,如何使用给定长度的mongoose传递Object_id
我正在尝试为用户创建一条路线,以便能够检查其他用户的个人资料.但是,我希望通过2个不同的网址加入这些配置文件/profile/nickname,/profile/id以便可以使用用户的昵称或用户ID来接收配置文件.我尝试了以下代码:
app.get("/profile/:id", function(req, res) {
User.findOne( { $or : [{ "nickname": req.params.id },{ "_id": req.params.id }] }, function(err, user) {
if(user)
{
res.render('users/profile.jade', {
locals: {
currentUser: user,
title: user.nickname +"'s Profile",
jsf:[],
}
});
}
else
{
res.render('404.jade', {
status: 404,
title: 'Page Not Found',
jsf: []
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
问题是,它似乎只是使用id而不是昵称,这意味着/profile/4f4ae474546708b219000005如果我访问的东西工作,但如果我访问/profile/mmellad哪个是该用户的给定昵称,我得到404页面.
还有一件事我觉得它对昵称很好用,它改变了查询
User.findOne( { $or : [{ "nickname": req.params.id },{ "_id": req.params.id }] }
Run Code Online (Sandbox Code Playgroud)
至
User.findOne( { "nickname": req.params.id } …Run Code Online (Sandbox Code Playgroud)