2012-03-28 4 views
6

mongodb에서 임베디드 문서를 업데이트하려고 시도하는 동안 꽤 문제가 있습니다. 나는 두 가지 방법을 시도해 보았지만 둘 다 작동하지 않았습니다. 어쨌든 내 스키마는 다음과 같이 보입니다 (업데이트하려는 임베디드 문서가 혼합 유형이라는 점에 유의할 수 있음).몽구스가 임베디드 문서를 업데이트하지 않습니다.

var UserModel = new mongoose.Schema({ 
    account: String, 
    salt: String, 
    password: String, 
    highlight_words: String, 
    networks: {}, 
    ip: String, 
    ident: String, 
    is_connected: Boolean, 
    account_type: String 
}); 

나는이 2 가지 코드 스 니펫으로 '네트워크'를 업데이트하려고 시도했지만 작동하지 않습니다. 나는 내 머리카락을 꺼내려고하고있다. (내가) (저장 콜백을 추가하는 시도했습니다, 그리고 오류없이 실행 주) 어떤 도움을 주시면 감사하겠습니다

self.userModel.findOne({account: key}, function(err, doc) { 
    doc.networks = self.client_data[key]['networks']; 
    doc.markModified('networks').save(); 
}); 

self.userModel.update({account: key}, {networks: self.client_data[key]['networks']}, function(err) {}); 

그리고! 감사!

편집 :

문제는 개체가 분명히이 좋아하지 않았다 그래서 {'some.thing': {more: 'stuff'}} 같았다이었다. 이해할 수있다!

+0

'self.client_data [키] [ '네트워크'] '의 값이 무엇입니까? 디버깅을 돕기 위해 일부 리터럴로 바꾸십시오. – paulmelnikow

+0

그것은 꽤 큰 물체입니다.하지만 사실을 알고 있습니다. 나는 그것을'doc.networks = {test : 123};으로 바꾸려고 시도했지만 여전히 문서를 저장하지 않았다. – rickibalboa

+0

첫 번째 버전에서도 나는 추측하고 있나? 어떤 일이라도 일치하지 않을 수도 있습니다. 'delete ({account : key}) '가 작동합니까? – paulmelnikow

답변

11

시도 doc.markModified('networks');. 스키마가없는 유형은 networks입니다. Mongoose는 스키마가없는 유형의 변경을 자동 감지 할 수 없습니다.

+0

내 생명을 구한 – Unitech

+0

당신은 내 영웅입니다! –

+0

그것은 나를 위해 일하는 Awsome 남자 :) –

2

이 작업을 수행하려면 스키마를 완전히 정의해야합니다. 예를 들면 :

네트워크 { 유형 : "문자열" }

관련 문제