2013-04-16 2 views
3

나는 기존의 mongodb 문서를 만들기 위해 시도하고있는 몽구스 모델 스키마를 가지고있다. 기존의 mongo 문서에는 동일한 콜렉션에 대한 자체 참조가 있습니다. 이 관계를 나타내는 스키마를 작성하려고 시도한 다음 populate method을 사용하려고 시도했습니다. 스키마 (일부 속성을 간결하게 제거) 아래처럼 보이는이mongoosejs 스키마에서 자체 참조를 채울 수 있습니까?

{ _id: '91320684-9a1a-4f2a-a03f-63a7a208ec9b', 
    pcap: 
    { files: [] } 
} 
결과

models.file.findById("91320684-9a1a-4f2a-a03f-63a7a208ec9b") 
.populate('pcap.files') // have also tried just 'files' w/ the same result 
.exec(function (err, file) { 
    if (!err) { 
     console.log(file); 
    } else { 
     console.log(err); 
    } 
}); 

을 :

var fileSchema = new Schema({ 
    _id: { type: String }, 
    pcap: { 
     files: [{ type: Schema.Types.ObjectId, ref: 'Files' }] 
    } 
}); 

var file = artifactConn.model('Files', fileSchema, 'info'); 

나는 다음과 같이 채울 다음 쿼리 위의 모델을 사용하고

mongohub에서 내 문서를 확인하면 다음과 같이 보입니다.

{ "_id" : "91320684-9a1a-4f2a-a03f-63a7a208ec9b", 
    "pcap" : { 
    "files" : [ 
     { "_id" : "e4eed129-b4aa-46fc-8df2-3f3f92e6fe53" }, 
     { "_id" : "8c0ecb98-452e-475d-a521-feba5c3d1426" }, 
     { "_id" : "4b87c467-f396-4bcf-a7b0-8419e8441ec0" } ] } } 

전화를 걸 때 문제가 있습니까? 내 스키마 설정이있는 방식입니까? 데이터가 저장되는 방식입니까?

답변

2

귀하의 스키마가 정확하지 않습니다. 당신이 스키마는 다음과 같이 컬렉션을 일치합니다 :

{ "_id" : "91320684-9a1a-4f2a-a03f-63a7a208ec9b", 
    "pcap" : { 
    "files" : [ 
     { ObjectId("e4eed129-b4aa-46fc-8df2-3f3f92e6fe53") }, 
     { ObjectId("8c0ecb98-452e-475d-a521-feba5c3d1426") }, 
     { ObjectId("4b87c467-f396-4bcf-a7b0-8419e8441ec0") } ] } } 

스키마는해야한다 :

var fileSchema = new Schema({ 
    _id: { type: String }, 
    pcap: { 
     files: [{ 
      _id: { type: String, ref: 'Files' } 
     }] 
    } }); 

작동합니다 그.

+0

그것은 더 이상 빈 집합이다하지만 지금은 대신'파일입니다 : [정의되지 않은, 정의, 정의되지 않은]'. 적어도 현재 참조를 읽고 있지만 채워지지는 않습니다. 다른 생각? – ahsteele

+0

populate ('pcap.files._id') – matthewtole

+0

불행히도'.populate ('files')','.populate ('pcap.files._id')', 나는 여전히'files : [undefined, undefined, undefined]'로 끝나는 것과 같은 영향을 미친다. 그러나,'.populate ('pcap.files')'는 에러를 던집니다.'TypeError : 'undefined'의'ref '속성을 읽을 수 없습니다. 내가 누락 된 것에 대한 아이디어가 있습니까? – ahsteele

1

스키마가 괜찮아 보입니다. 데이터를 동일한 방식으로 저장하면 좋을 것입니다.

{ "_id" : "91320684-9a1a-4f2a-a03f63a7a208ec9b", 
    "pcap" : { 
    "files" : [ ObjectId("e4eed129-b4aa-46fc-8df2-3f3f92e6fe53"), ObjectId("8c0ecb98-452e-475d-a521-feba5c3d1426"), ObjectId("4b87c467-f396-4bcf-a7b0-8419e8441ec0")] 
    } 
} 

다음

Model.find(..).populate('pcap.files').exec(..) 
관련 문제