Question

J'ai quelques documents MongoDB avec ce schéma :

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

et ces documents sont exposés au format OData par une petite application Web (j'utilise Express, JayData et Mongoose).Voici quelques-uns de ces documents :

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

Si je tape cette adresse http://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70') qui correspondent à Service74 J'obtiens ce résultat :

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

Bien sûr, si j'utilise l'identifiant spécifié dans le résultat, j'obtiens la même page.

Le problème se produit lorsque j'essaie d'utiliser la fonction mangouste 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);
});

j'ai compris NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw et puis cette erreur :

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

Où est-ce que je me trompe ?Dites-moi si d'autres informations me manquent...

Merci.

PS :J'ai trouvé un problème similaire ici Mangouste:La diffusion vers ObjectId a échoué, mais si je change la définition du modèle pour Mongoose (dans laquelle en fait je ne déclare pas l'identifiant) en incluant cette définition :

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

rien ne change...

Était-ce utile?

La solution

Le 5343fd656b9c5c084b8f2a70 est l'identifiant interne de l'entité utilisé côté serveur.Cette valeur est codée en base64 sur OData, c'est pourquoi vous recevez NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw dans le champ Identifiant.L'entité peut être facilement récupérée par Id en appelant atob(req.params.id) sur l'identifiant reçu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top