Frage

Ich habe einige MongoDB-Dokumente mit diesem Schema:

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

und diese Dokumente werden von einer kleinen Webanwendung als OData verfügbar gemacht (ich verwende Express, JayData und Mongoose).Dies sind einige dieser Dokumente:

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

Wenn ich diese Adresse eingebe http://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70') die entsprechen Dienstleistung74 Ich bekomme dieses Ergebnis:

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

Wenn ich die im Ergebnis angegebene ID verwende, erhalte ich natürlich dieselbe Seite.

Das Problem tritt auf, wenn ich versuche, die Mungo-Funktion zu verwenden Nach ID suchen:

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

Ich verstehe das NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw und dann dieser Fehler:

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

Wo liege ich falsch?Sagen Sie mir, wenn ich andere Informationen vermisse...

Danke.

PS:Ich habe hier ein ähnliches Problem gefunden Mongoose:Umwandlung in Objekt-ID fehlgeschlagen, aber wenn ich die Modelldefinition für Mungo ändere (in der ich die ID eigentlich nicht deklariere), indem ich diese Definition einfüge:

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

nichts ändert sich...

War es hilfreich?

Lösung

Der 5343fd656b9c5c084b8f2a70 ist die interne Kennung der Entität, die auf der Serverseite verwendet wird.Dieser Wert ist base64-codiert über OData, deshalb erhalten Sie NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw im Feld Id.Die Entität kann einfach per ID abgerufen werden, indem Sie anrufen atob(req.params.id) auf der empfangenen Id.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top