Pergunta

Tenho alguns documentos MongoDB com este esquema:

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

e esses documentos são expostos como OData por um pequeno aplicativo da web (estou usando Express, JayData e Mongoose).Estes são alguns desses documentos:

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

Se eu digitar esse endereço http://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70') que correspondem a Serviço74 Eu obtenho este resultado:

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

Claro que se eu usar o Id especificado no resultado obtenho a mesma página.

O problema ocorre quando tento usar a função mangusto encontrarById:

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);
});

Eu entendi isso NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw e então este erro:

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

Onde estou errado?Diga-me se eu perder alguma outra informação ...

Obrigado.

PS:Encontrei um problema semelhante aqui Mangusto:Falha na transmissão para ObjectId, mas se eu alterar a definição do modelo para o Mongoose (no qual na verdade não declaro o id) incluindo esta definição:

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

nada muda...

Foi útil?

Solução

O 5343fd656b9c5c084b8f2a70 é o identificador interno da entidade usada no lado do servidor.Este valor é codificado em base64 em OData, é por isso que você recebe NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw no campo ID.A entidade pode ser facilmente recuperada por Id chamando atob(req.params.id) no ID recebido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top