use*_*529 4 mongoose mongodb node.js
我正在尝试使用MEAN堆栈的非常简单的CRUD API.我在mongolab沙箱db中输入了几个文件.我可以对所有文件进行GET,他们都会被退回.然后我通过ID测试了GET:
router.route('/api/v1/resources/:resource_id')
// get the resource with that id (accessed at GET http://localhost:8080/api/resources/:resource_id)
.get(function(req, res) {
Resource.findById(req.params.resource_id, function(err, resources) {
if (err)
res.send(err);
res.json(resources);
});
});
Run Code Online (Sandbox Code Playgroud)
它根本行不通.我一直变空.但文件存在.当我在所有文件上进行GET时,我可以看到它.
然后我终于得到了另一份文件.
区别?返回的记录具有以下格式的ID:
{
"_id": { "$oid":"1234567890abc"}
}
Run Code Online (Sandbox Code Playgroud)
但是没有返回的记录有这样的:
{
"_id": "1234567890abc"
}
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下吗?我用Postman输入了数据,我没有在条目之间做任何不同的事情.
什么是$ oid?什么创造了$ oid?为什么嵌套对于mongoose的findById()很重要?
谢谢!
$oid来自严格的MongoDB Extended JSON.
您对包含_id条件的MongoDB数据库的所有查询都应该包含_id在ObjectId以下函数中:
db.resources.findOne({_id: ObjectId("507c35dd8fada716c89d0013")};
Run Code Online (Sandbox Code Playgroud)
MongoLab提供了通过JSON语法查询MongoDB的UI.但是你不能ObjectId在JSON中使用规范限制.
因此,MongoLab使用Strict MongoDB Extended JSON作为别名ObjectId()- > $oid.
{"_id": {"$oid":"507c35dd8fada716c89d0013"})
Run Code Online (Sandbox Code Playgroud)
$oid您在输出中看到的相同,因为MongoLab UI也使用JSON.
Mongoose会自动将字符串转换_id为MongoDB查询,因此您无需手动执行此操作.以下查询是等效的:
Resource.findById("507c35dd8fada716c89d0013");
Resource.findById(new mongoose.Types.ObjectId("507c35dd8fada716c89d0013"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3735 次 |
| 最近记录: |