2015-02-01 3 views
0

현재 매우 이상한 몽구스 오류가 발생하며이 문제의 원인을 알 수 없습니다. findOne 메서드를 호출하면 _id 필드가 초기화되지 않은 유효한 인스턴스가 나타납니다. 나는 내가 간단한 스키마 정의가몽구스 findOne 메서드가 _id가 누락 된 유효한 문서를 검색합니다.

{ [CastError: Cast to ObjectId failed for value "[object Object]" at path "_id"] 
message: 'Cast to ObjectId failed for value "[object Object]" at path "_id"', 
name: 'CastError', 
type: 'ObjectId', 
value: 
    { from_node_id: 52e10f6acce9daa7f3bf3162, 
    target_id: 'a' }, 
path: '_id' } 

와 충돌 해당 문서의 변경 내용 저장하기 위해 노력하고있어 경우 :

var mongoose = require('mongoose'), 
Schema = mongoose.Schema; 

var transitionProbabilitySchema; 
transitionProbabilitySchema = new Schema({ 
    _id: { 
     from_node_id: {type: Schema.Types.ObjectId, ref: "Zone"} 
    }, 
    value: { 
     total_transition_count: Number, 
     probabilities: [ 
      {to_node_id: {type: Schema.Types.ObjectId, ref: "Zone"}}, 
      {probability: Number} 
     ]} 
}, {collection: 'transitionProbability'}); 

module.exports = mongoose.model('transitionProbability', transitionProbabilitySchema); 

을 때 나는 지금

TransitionProbability.findOne({"_id.from_node_id": from_node_id}, 
     function (err, tp) { 
      if (err) { 
       handleError('error - tp not found', err, callback); 
      } else { 
       // some modification of tp and then save 
      } 
     } 

몽구스 반환 전화 문서가 있지만 _id 만 초기화되지 않습니다. 전에 변경된 문서를 저장하려고 할 때 전체 함수가 충돌합니다. 또한 콘솔에 문서를 기록하여 '_id'필드가 누락되었는지 확인했습니다.

추 신 : from_node_id은 다른 쿼리에서 추출되었으며 유효한 ObjectId입니다.

아이디어가 있으십니까? 도와 주셔서 미리 감사드립니다.

편집 : _id 필드를 수동으로 설정해도 작동하지 않는 것 같습니다. 더욱 흥미로운 점은 다른 방법을 시도하면서 어떤 로그도없이 findOneAndUpdate이 전체 node.js 앱을 정지한다는 것을 알았습니다. 단지 계속되지 않습니다.

답변

0

편집 : 정보 : 답변을 찾지 않고 바로 2 일간 검색 한 후 Mongoose.js Github에서 가능한 버그 티켓을 만들었고 문제를 확인했습니다. According to them it is fixed in the new 4.0.0 release candidate, 생산적인 사용에는 권장되지 않습니다. 실제로 내 문제를 해결했지만 rc1은 더 많은 문제를 만들었습니다. 지금까지


내 솔루션 :

마지막으로 나는 별도의 from_node_id 필드가없는 _id 그래서 내가 그 테이블의 내 전체 누적를 변경하는 것이,이 오류가 너무 짜증이었다. 지금 ID로 직접 from_node_id을 사용합니다.

+0

원래 유효한 값으로 채워진 subdoc ref가있는 스키마가 있습니다. 나는 ref 값을 아무런 문제없이 undefined로 설정할 수있다. 그러나 유효한 값을 현재 정의되지 않은 ref 필드로 다시 설정하면 ObjectId로 캐스팅 오류가 발생합니다. 이 모든 것이 관련되어 있습니까? 몽구스 ~ 3.8.8을 사용하고 있습니다. –

+0

채워진 값으로 문서를 검색 할 수 있으므로 문제가 다른 것 같습니다. 내 문제는 실제로 _id가 검색된 문서를 수정할 수 없게하는 유효한 값으로 채워지지 않는다는 것입니다. –

+0

네, 그게 다릅니다. Express에 대한 MEAN.js 업데이트 스캐 폴드를 통해 채워진 문서를 업데이트하려고한다는 사실과 관련이 있습니다. 이 문제를 해결할 수있는 여러 가지 방법을 찾고 있지만 완전히 추악합니다 (예 : 부모 모델을 다시 쿼리하고 Express 컨트롤러에서 요청의 세부 정보를 수동으로 입력). 나는 몽구스가이 사건을 최소한 감지하고 더 나은 피드백을 제공하기를 희망했다. –

관련 문제