2017-07-12 7 views
1

私はNoSQLの世界では全く新しく、その周りに私の心を包むのは難しかったです。私はここのNode.jsとMongoDBの(マングース)を学習してた今週は私の現在のスキーマです:Mongooseスキーマの設計に関する質問

働いているこれは、私がへの個人的なアクセス権を持つユーザーとパスワードを追加し、アクセス権を持っているしたいと今
var eventDataSchema = new Schema({ 
    _id  : Number, 
    notes  : {type: String, required: true}, 
    start_date : {type: Date, required: true}, 
    end_date : {type: Date, required: true}, 
}, { 
    id   : false, 
    collection : 'event-data' 
}); 
eventDataSchema.plugin(AutoIncrement); 

var EventData = mongoose.model('EventData', eventDataSchema); 

EventData

また、私はjavascriptにeventDataのみのJSONを送信したいが、ユーザーはそれを送信しない場合はどうすればよいですか?

私は現在、この形式での私のjsに私のEVENTDATAを送っています方法:私が理解できたよう

router.get('/data', function(req, res){ 
    EventData.find({}, function(err, data){ 
    if (err) { 
     console.error('Error occured'); 
    } 
    res.send(data); 
    }); 
}); 

おかげで再び

+0

あなたは、より具体的に説明してくださいことはできますか? –

+0

確かに...このスキーマには、認証に使用するユーザーとパスワードを実装したいのですが、このスキーマ内では、eventDataのブロックもたくさん必要です。例: ユーザー:ジョン・ドウ パスワード:123の イベント:[{_id:1 ノート:イベントA START_DATE:1/1/01、 END_DATE:1/1/01、 }、 {_id:2 ノート:イベントB START_DATE:1/2/01、 END_DATE:1/2/01、 }、 {_id:3 ノート:イベントC START_DATE:1/3/01、 END_DATE:1/3/01、 } – user258813

+0

John DoeがサインアップしてイベントA、B、Cにアクセスしました。イベントのコレクションが異なる別のユーザーがいるかもしれませんが – user258813

答えて

1

あなたのスキーマ内のイベントのキーを追加します。上記のコードは、あなたが2つのスキーマ、EventDataのためのユーザと他のための1つを作成することができます動作しない場合

var userSchema = new Schema({ 
     user: { type: String, required: true, trim: true }, 
     password: { type: String, required: true, trim: true }, 
     events: [{ 
      notes: { type: String,required: true, trim: true }, 
      start_date: { type: Date,required: true }, 
      end_date: { type: Date,required: true } 
      }] 
    } 
    userSchema.plugin(AutoIncrement); 
    var userSchema = mongoose.model('userSchema', userSchema); 
}); 

、そしてuserSchemaであなたのEVENTDATAを移入することができます。そして、あなたのスキーマがそのようになります。

ので、あなたのコードはそのようになります:

userSchema.js:

var userSchema = new Schema({ 
     user: { type: String, required: true, trim: true }, 
     password: { type: String, required: true, trim: true }, 
     events: {type: mongoose.Schema.Types.ObjectId, ref: 'EventData' } 

    userSchema.plugin(AutoIncrement); 
    module.exports = mongoose.model('userSchema', userSchema); 
}); 

そして、あなたのeventDataSchemaは次のようになります。

eventSchema.js:

var eventDataSchema = new Schema({ 
      notes: { type: 'string',required: true, trim: true }, 
      start_date: { type: Date,required: true }, 
      end_date: { type: Date,required: true } 
    } 
    eventDataSchema.plugin(AutoIncrement); 
    module.exports = mongoose.model('EventData', eventDataSchema); 
}); 

、その後、あなたがそのような結果を得ることができます: index.js:

var eventSchema = require('./eventSchema'); 
var userSchema = require('./userSchema'); 

var populate = [{ 
     path: 'events', 
     model: 'EventData', 
     select: '_id notes start_dat end_date' 
    }]; 

var find = function (query) { 
    return userSchema.find(query).populate(populate).exec(); 
} 
console.log(find()); 

結果:

{ 
     _id:cfgvhbjnkmkdcfxghgjklxnmbxhdhjxjhjhgx, 
     user: John Doe, 
     password: 123, 
     events: [ { _id: 1gfye56785g3ycgevhxeftx568765egcd, 
        notes: Event A, 
        start_date: 1/1/01, 
        end_date: 1/1/01 
       } ] 

} 
+0

ありがとうございました。それは私が理解するのに苦労していたものですが、あなたの例を見ると、今より意味があります。 – user258813

+0

ようこそ@ user258813 –

関連する問題