2017-05-08 16 views
0

私はMEANアプリケーションを持っており、複数のイベント行を含むCSVをアップロードできるようにしています。 CSVを賞賛した後、イベントオブジェクトのリストがあり、mongoose insertManyを使用してレコードを挿入できます。私はこのようなイベントと出席者のスキーマを持っています(この質問では簡略化されています)。人口に対するルックアップが可能なマングースinsertMany

var EventSchema = new mongoose.Schema({ 
    name: String, 
    date: Date, 
    location: String, 
    speaker: { type: ObjectId, ref: 'Attendee' }, 
}); 

var AttendeeSchema = new mongoose.Schema({ 
    firstname: String, 
    email: {type: String, unique : true}, 
    speaker: Boolean, 
}); 

私の問題は、ユーザーがCSVをアップロードしているときに、スピーカーの電子メールアドレスのみを認識し、ObjectIdは認識しないということです。このメールは常に一意です。 Event.insertMany()を実行すると、EメールでAttendee.findOneを実行し、挿入されたときに各イベントの出席者にObjectId refでスピーカーフィールドを移入する方法があります。

+0

こんにちは。なぜあなたはそれを逐次実行したくないのですか?まずAttendeeオブジェクトを準備し、Event.insertMany()を実行しますか? – Sergaros

+0

私はmongoose(mongo)の専門家ではありません。これは直接的な答えではありませんが、最初にAttendeeSchemaに対して質問してスピーカーを取得し、それを挿入に使用することで達成できます。 – someUser

答えて

0

私はあなたが順番にそれを行う必要がありますと思う:

let email; //you know this email 
let events;// prepared events data but without speaker id 

Attendee.findOne({email: email}).then(result=>{ 
    events.forEach(event=>event.speaker = result._id); 
    return events: 
}) 
.then(events=>{ 
    return Event.insertMany(events); 
}) 
.then(results=>{ 
    /*something results handle*/ 
}) 
.catch(err=>{ 
    throw err; 
}) 
+0

私はそれを逐次行うことを避けようとしていましたが、これは間違いなく機能します。私はAttendee.find({speaker:true})を使用してすべてのスピーカーのリストを返してから、電子メールをキーに、idを値としてマップを作成しました。私はイベントのリストを準備し、Event.insertMany(events)を使用しました。 –

関連する問題