【问题标题】:OData - Strange index with MongoDB [Mongoose: Cast Error]OData - MongoDB 的奇怪索引 [Mongoose: Cast Error]
【发布时间】:2014-05-28 12:40:22
【问题描述】:

我有一些具有此架构的 MongoDB 文档:

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

这些文档由一个小型 Web 应用程序(我使用 Express、JayData 和 Mongoose)公开为 OData。 这些是其中的一些文件:

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

如果我输入这个地址 http://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70') 对应于 Service74 我会得到这个结果:

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

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

当我尝试使用猫鼬函数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:我在这里Mongoose: Cast to ObjectId failed 发现了一个类似的问题,但是如果我通过包含这个定义来更改 Mongoose 的模型定义(实际上我没有声明 id):

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

什么都没有改变...

【问题讨论】:

    标签: mongodb express mongoose odata jaydata


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-19
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2015-07-12
      • 2018-10-05
      • 1970-01-01
      相关资源
      最近更新 更多