Pregunta

Tengo algunos documentos de MongoDB con este esquema:

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

y estos documentos se exponen como OData mediante una pequeña aplicación web (estoy usando Express, JayData y Mongoose).Estos son algunos de esos documentos:

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

Si escribo esta dirección http://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70') que corresponden a Servicio74 Obtengo este resultado:

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

Por supuesto, si uso el Id especificado en el resultado obtengo la misma página.

El problema ocurre cuando intento usar la función mangosta. buscarporId:

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

entiendo esto NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw y luego este error:

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

¿Dónde me equivoco?Dime si me pierdo alguna otra información...

Gracias.

PD:Encontré un problema similar aquí. Mangosta:Error en la conversión a ObjectId, pero si cambio la definición del modelo para Mongoose (en el que en realidad no declaro la identificación) incluyendo esta definición:

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

nada cambia...

¿Fue útil?

Solución

El 5343fd656b9c5c084b8f2a70 es el identificador interno de la entidad que se utiliza en el lado del servidor.Este valor está codificado en base64 a través de OData, es por eso que recibe NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw en el campo Identificación.La entidad se puede recuperar fácilmente mediante Id llamando atob(req.params.id) en la identificación recibida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top