OData - MongoDB의 이상한 인덱스 [Mongoose:캐스트 오류]
문제
이 스키마가 포함된 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)
받은 아이디에