2012-03-28 25 views
6

mongodbの埋め込みドキュメントを更新しようとしていますが、かなり問題があります。私は2つの方法を試してみましたが、どちらもうまくいきませんでした。とにかく、私のスキーマはこのようになります(私が更新しようとしている埋め込みドキュメントは混在型です)。mongooseが埋め込みドキュメントを更新していません

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.update({account: key}, {networks: self.client_data[key]['networks']}, function(err) {}); 

そして、(私は)(保存するコールバックを追加しようとしました、そして、それはエラーなしで実行されることに注意してください)

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

任意の助けいただければ幸いです!ありがとう!

編集:

問題は、オブジェクトがそう{'some.thing': {more: 'stuff'}}明らかにそれが好きではなかったようだったということでした。それは理解できます!

+0

'self.client_data [キー] [ 'ネットワーク']'の値は何ですか?デバッグに役立つリテラルを置き換えてみてください。 – paulmelnikow

+0

それはかなり大きなオブジェクトですが、私は実際にそれが設定されていることを知っています。私は 'doc.networks = {test:123};に置き換えようとしましたが、それでも文書は保存されませんでした。 – rickibalboa

+0

最初のバージョンでも、私は推測していますか?どんなことにもマッチしないの? 'delete({account:key})'は機能しますか? – paulmelnikow

答えて

11

Try doc.markModified('networks');スキルレスタイプのnetworksと思われます。 Mongooseはスキルレス型の変更を自動検出できません。

+0

あなたは私の人生を救った – Unitech

+0

あなたは私のヒーローです! –

+0

それは私のために働いた大した男:) –

2

これを機能させるには、スキーマを完全に定義する必要があります。例えば:

ネットワーク{ タイプ: "文字列"

}
関連する問題