以下のような Message という名前のスキーマがあります。
Message = new Schema({
id: Number,
sender: ObjectId,
receiver: ObjectId,
date: Date,
content: String,
type: Number
});
そして、以下のような User スキーマ;
User = new Schema({
id: Number,
username: String,
isOnline: Boolean
});
新しいメッセージを受信したときに、メッセージ アイテムの送信者と受信者のプロパティを設定したいと考えています。メッセージを受信したら、新しいメッセージ ドキュメントを作成し、そのプロパティを設定しています。しかし、送信者と受信者のプロパティ (ユーザー ドキュメント内のエンティティへの参照である必要があります) を設定する方法がわかりません。私が使用しているコードは以下のようなものです。好きなだけコードを判断できます。それが私が望んでいることです。私はそれを取り除く正しい方法を知りません。しかし、これはそうではないようです。以下のコードを使用しているときに、送信者と受信者のプロパティが設定されていることを確認できませんでした。findOne が非同期だからではないかと思います(そうかどうかはわかりません)。
var m = new Message();
m.content = messageData.text;
m.id = messageId;
User.findOne({id: socket.userId}, function (e, o) {
m.sender = o;
});
User.findOne({id: messageData.userId}, function (e, o) {
m.receiver = o;
});
m.save(function (e) {
if (!e) {
console.log("message is saved to the mongodb...");
}
});
これを行う正しい方法を教えていただければ幸いです。
前もって感謝します。