2017-07-12 72 views
1

我對NoSQL世界是全新的,並且很難圍繞它進行思考。這一週,我正在學習的MongoDB(貓鼬)用Node.js的,這裏是我的當前模式:關於Mongoose Schema設計的問題

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

另外...後來,如果我想只發送一個JSON的eventData,但不是用戶到我的JavaScript,我該怎麼做?

我現在送我EVENTDATA我的JS在此格式的方法:

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

再次感謝

+0

能否請你更具體? –

+0

當然...我想在這個模式中實現用於身份驗證的用戶名和密碼,但是在這個模式中,我還希望有很多的eventData塊。例如: 用戶:John Doe的 密碼:123個 事件:[{_id:1 說明:事件A 起始日期:1/1/01, END_DATE:1/1/01, },{ _id:2 筆記:事件B 起始日期:01年1月2日, END_DATE:01年1月2日, },{ _id:3個 筆記:事件C 起始日期:01年1月3日, END_DATE:1/3/01, }] – user258813

+0

John Doe會註冊並可以訪問他的活動A,B和C.雖然可能會有另一個用戶使用不同的事件集合 – user258813

回答

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); 
}); 

如果上面的代碼不能正常工作,那麼你可以創建兩個模式,一個爲EVENTDATA用戶等,並可以在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 –