Domanda

Ho alcuni documenti mongodb con questo schema:

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

E questi documenti sono esposti come Odata da una piccola applicazione Web (sto usando Express, JayData e mangusta). Questi sono alcuni di questi documenti:

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

Se digito questo indirizzo http://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70') che corrispondono a Service74 ottengo questo risultato:

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

Ovviamente se utilizzo l'ID specificato nel risultato ottengo la stessa pagina.

Il problema si verifica quando provo a utilizzare la funzione di mangusta 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);
});
.

ottengo questo NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw e quindi questo errore:

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

Dove sono sbagliato? Dimmi se mi mancano alcune altre informazioni ...

Grazie.

PS: Ho trovato un problema simile qui MONGOOSE: Cast to ObjectID ha fallito , Ma se modifico la definizione del modello per mangusta (in cui in realtà non dichiaro l'ID) includendo questa definizione:

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

Nulla cambia ...

È stato utile?

Soluzione

Il 5343fd656b9c5c084b8f2a70 è l'identificatore interno dell'entità che viene utilizzato sul lato server.Questo valore è BASE64 codificato su Odata, questo è il motivo per cui si riceve NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw nel campo ID.L'entità può essere facilmente recuperata da ID chiamando atob(req.params.id) sull'ID ricevuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top