我有一些带有此模式的MongoDB文档:

Id: {type: "id", key: true, computed: true, nullable: false},
Name: {type: "string", nullable: false, maxLength: 50}

并且这些文档被一个小型web应用程序暴露为OData(我正在使用Express,JayData和Mongoose)。这些是其中的一些文件:

{ "_id" : ObjectId("5343fd656b9c5c084b8f2a70"), "Name" : "Service74"},
{ "_id" : ObjectId("5343fd656b9c5c084b8f2a6f"), "Name" : "Service73"},
{ "_id" : ObjectId("5343fd656b9c5c084b8f2a6e"), "Name" : "Service72"},
...

如果我输入这个地址 http://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70') 其中对应于 服务74 我得到这个结果:

...
<d:Id>NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw</d:Id>
<d:Name>Service74</d:Name>
...

当然,如果我使用结果中指定的Id,我会获得相同的页面。

当我尝试使用mongoose函数时,会出现问题 findById:

app.post("/addCompare/:id", function(req, res) {
    console.log(req.params.id);
    Services.findById(req.params.id, function(err, service) {
        if(!err) {console.log(service);}
        else {console.log(err);}
    });
    res.send(200);
});

我明白了 NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw 然后这个错误:

{ message: 'Cast to ObjectId failed for value "NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5" at path "_id"',
  name: 'CastError',
  type: 'ObjectId',
  value: 'NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5',
  path: '_id' }

我错在哪里?告诉我,如果我错过了一些其他信息。..

谢谢.

PS:我在这里发现了类似的问题 猫鼬:转换为ObjectId失败, ,但是如果我通过包含此定义来更改Mongoose的模型定义(实际上我没有声明id):

var serviceSchema = mongoose.Schema({
    _id: String,
    ...

什么都没有改变。..

有帮助吗?

解决方案

5343fd656b9c5c084b8f2a70 是在服务器端使用的实体的内部标识符。此值通过OData进行base64编码,这就是您收到的原因 NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw 在Id字段中。实体可以通过调用Id轻松检索 atob(req.params.id) 收到的Id上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top