[編集]:私はこれを使って、非常に具体的な再現可能な例を用いてこの問題を更新しました。なぜこの単純なMongoose.jsプログラムは、「入れ子にされた」保存中にフリーズしますか?
これは私のプログラム全体です。
私は、2つのオブジェクトa
とb
を行い、それぞれのコレクションA
とB
で2つのスキーマASchema
とBSchema
を作成し、順次それらを保存しよう - b
その後、つまり、最初のa
。
mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/test');
ASchema = new Schema({
text: String
});
BSchema = new Schema({
val: Number
});
A = mongoose.model('A', ASchema);
B = mongoose.model('B', BSchema);
a = new A({text: 'this is a'});
b = new B({val: 5});
a.save(function(err) {
if(err) console.log(err.message);
else {
console.log('saved a : ', a);
b.save(function(err) {
if(err) console.log(err.message);
else {
console.log('saved b : ', b);
}
});
}
});
mongoose.disconnect();
私は起こるはず期待して何
:
それは文書Bに続いて、文書Aに続いてsaved a :
を印刷し、その後saved b :
必要があります。
実際に何が起こるか:
それはsaved a : { text: 'this is a', _id: 4ee4cab00d2c35fc04000001 }
と何も印刷しません。プログラムは停止しません。それは「固まった」ままです。
mongoシェルを見て、コレクションas
(a
、それは大丈夫です)が作成されており、その中に保存された文書がdb.as.find()
で表示されています。しかし、私はコレクションbs
を見つけることができません。
微調整
:a
とb
の場所(保存の順番を)スワップ省コードで
は、b
が保存されるようになり、そしてa
は保存されないように。したがって、問題は具体的にa
またはb
ではありません。
質問:なぜ次の文書を保存しないのですか?
のベストプラクティスのためのリンクを参照してください。エラーが完全にOKに見えた、このコードからではないようです。私は代理人またはそのような何かに間違いがあるかもしれないと思う。あなたconsole.logできますか? – alessioalex
人/エージェントに問題はありません。なぜなら、コード内の場所を入れ替えても同じ効果が生じます。つまり、「内側」のものを保存するときに常にハングします。 –
もっと一般的な例を編集し、誰でもテストすることができます。 –