문제

이 스키마가 포함된 MongoDB 문서가 있습니다.

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

그리고 이 문서들은 작은 웹 애플리케이션(저는 Express, JayData, Mongoose를 사용하고 있습니다)에 의해 OData로 노출됩니다.다음은 해당 문서 중 일부입니다.

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

이 주소를 입력하면 http://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70') 에 해당하는 서비스74 나는 다음과 같은 결과를 얻습니다.

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

물론 결과에 지정된 ID를 사용하면 동일한 페이지를 얻게 됩니다.

몽구스 함수를 사용하려고 하면 문제가 발생합니다. ID별 찾기:

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' }

내가 어디 잘못 됐나요?또 다른 정보가 누락되면 알려주세요...

감사해요.

추신:여기서 비슷한 문제를 발견했습니다. 몽구스:ObjectId로 캐스팅하지 못했습니다., 그러나 다음 정의를 포함하여 Mongoose에 대한 모델 정의(실제로는 ID를 선언하지 않음)를 변경하면 다음과 같습니다.

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

아무것도 변하지 않아...

도움이 되었습니까?

해결책

그만큼 5343fd656b9c5c084b8f2a70 서버 측에서 사용되는 엔터티의 내부 식별자입니다.이 값은 OData를 통해 base64로 인코딩되므로 NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw ID 필드에호출을 통해 ID로 엔터티를 쉽게 검색할 수 있습니다. atob(req.params.id) 받은 아이디에

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top