質問

このスキーマを持つMongoDB文書をいくつか持っています:

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

これらの文書は、小さなWebアプリケーションによってODataとして公開されています(私はExpress、Jaydata、Mongooseを使用しています)。 これらはそれらの文書のいくつかです:

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

Service 74 に対応するこのアドレスhttp://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70')を入力すると、この結果が得られます。

...
<d:Id>NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw</d:Id>
<d:Name>Service74</d:Name>
...
. もちろん、結果に指定されているIDを使用すると、同じページが取得されます。

Mongoose関数を使用しようとすると問題が発生します 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);
});
.

このNTM0M2ZkNjU2YjljNWMwODRiOGYyYTcwを取得してからこのエラー:

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

どこにいますか?他の情報が恋しいかどうか教えてください...

ありがとう。

PS:私はここで似たような問題を見つけました Mongoose:ObjectIDにキャストが失敗しましたしかし、この定義を含めることで、Mongooseのモデル定義を変更した場合(実際にIDを宣言しない):

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

何も変わらない...

役に立ちましたか?

解決

5343fd656b9c5c084b8f2a70は、サーバー側で使用されるエンティティの内部識別子です。この値はODATA上でBase64エンコードされているため、IDフィールドにNTM0M2ZkNjU2YjljNWMwODRiOGYyYTcwを受信する理由です。受信したIDにatob(req.params.id)を呼び出すことで、エンティティをIDで簡単に検索できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top