で、ドキュメントオブジェクト配列への追加の簡単な例:マングース/ MongoDBは - これらは私のコレクションのスキーマあると仮定して、簡単のがたのためにあらかじめ定義されたスキーマ
var MessageDeliverySchema = new Schema({
from : { type : String },
to : { type : String },
status : { type : String }
});
var Messages = mongoose.model('messages',
new Schema({
id : ObjectId,
user : { type:String },
'sent-messages' : [MessageDeliverySchema]
}));
コレクション内したがって、各文書メッセージは、MessageDeliverySchemaによって定義されたの4分の5 送信メッセージを持つことができます。私が何をしたいか
は送信され、メッセージの配列を持っているので、私はちょうどメッセージを更新し、別の送信されたメッセージを追加するには、各時間は、配信確認が来ます。私が試した何
:
var delivered = {
from: 'foo',
to: 'bar',
status: 'delivered'
};
Message.update({_id: '5064aae4154cb34d14000001' },
{$pushAll: { 'sent-messages' : delivered }} , {upsert:true}, function(err, data) {
});
Message.update({_id: '5064aae4154cb34d14000001' },
{$push: { 'sent-messages' : delivered }},{upsert:true}, function(err, data) {
});
$ pushAll、および$のプッシュは、その代わりに、既存のメッセージを上書きし、送信されたメッセージ-に新しいオブジェクトを追加しません。私が見たいと思って何
は、送信されたメッセージ例えばの配列です:
{
'sent-messages': [
{
from: 'foo',
to: 'bar',
status: 'delivered'
},
{
from: 'pippo',
to: 'pippo',
status: 'delivered'
},
{
from: 'paul',
to: 'smith',
status: 'undelivered'
}
]
}
は '$のpush'を使用する権利演算子であり、私はそれをしようとしたとき、コードがうまく働きました。私がそれを走らせるたびに、新しい 'sent-messages'配列要素が追加されました。 – JohnnyHK
@JohnnyHKああ、そう、それは既存のメッセージを上書きしていませんでした。エラーが発生しました: '$ push/$ pushAll修飾子を非配列に適用できません'。 – StuR
すでにデータベースにあるドキュメントの 'sent-messages'プロパティが配列でないため、プッシュできません。おそらくあなたは他の手段でその文書を追加していますので、あなたのMongooseスキーマと一致しません。 – JohnnyHK