2016-07-01 6 views
1

mongoose addToSetを使用して、複数のObjectIdをサブドキュメント配列に追加しようとしています。私は単一のサブ文書を追加するための同様の方法を使用しましたが、私は複数のサブ文書を追加する方法を把握しようとしています。MongooseでaddToSetを使って複数のObjectIdを追加するには?

プロジェクトモデル

import mongoose from 'mongoose'; 

var Schema = mongoose.Schema; 
const ProjectSchema = new Schema({ 
    title: { 
      type: String 
    }, 
    files: [{ 
      type: Schema.ObjectId, 
      ref: 'File' 
    }] 
}); 

export default mongoose.model('Project', ProjectSchema); 

ファイルモデル

import mongoose from 'mongoose'; 

var Schema = mongoose.Schema; 
const FileSchema = new Schema({ 
    fileUrl: { 
      type: String 
    }, 
    date: { 
      type: Date 
    } 

}); 

export default mongoose.model('File', FileSchema); 

コントローラ

Project.create({fileUrl: req.fileUrl}, (err, proj) => { 
     if (err) { 
     console.log(err); 
     return res.status(400).send(err); 
     } else { 
     File.distinct('_id', {date: {"$lt": req.date }}).exec((err, files) => { 
      if (err) 
      return (err) 
     var added = new File([files]) <-----THE PROBLEM 
     proj.files.addToSet(added) 
     proj.save() 
     return res.status(200).send('OK'); 
    }) 
    } 
}); 

//通常、私は希望あなたは非常に接近している (例)

var foo = new File(file) 
proj.files.addToSet(foo) 
proj.save() 

答えて

0

:私は配列への1つのサブドキュメントを追加した場合は、このような何かを!追加された変数を渡しているときは、値リストを送信していません。あなたは基本的に配列の単一オブジェクトを送ります。あなたがここにはJavaScriptイテレータのより多くの例を見つけることができます

files.forEach(function(f) { 
    var added = new File(f) 
    proj.files.addToSet(added); 
    proj.save(function(err, saved){ 
     if (err) 
     throw (err) 
     return; 
    }) 
}); 

あなたは単純な反復処理をやってみてください、addToSet機能を実行したい場合はFor-each over an array in JavaScript?あなたのためのオプションの素晴らしいと包括的なリストがあります。

関連する問題