Node.js 关于猫鼬图式设计的几个问题

Node.js 关于猫鼬图式设计的几个问题,node.js,mongoose-schema,Node.js,Mongoose Schema,我对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: Dat

我对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,而不想向用户发送JSON,我该怎么做

我当前以以下格式将eventData发送到我的js的方式:

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

再次感谢

,因为我知道您希望在架构中添加事件键。然后,您的模式将如下所示:

    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。

因此,您的代码如下所示:

    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.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);
});
    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);
 });
{
      _id:cfgvhbjnkmkdcfxghgjklxnmbxhdhjxjhjhgx,
      user: John Doe,
      password: 123,
      events: [ { _id: 1gfye56785g3ycgevhxeftx568765egcd,
                  notes: Event A,
                  start_date: 1/1/01, 
                  end_date: 1/1/01
                } ]

}
您的事件数据模式将是:

eventSchema.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);
});
    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);
 });
{
      _id:cfgvhbjnkmkdcfxghgjklxnmbxhdhjxjhjhgx,
      user: John Doe,
      password: 123,
      events: [ { _id: 1gfye56785g3ycgevhxeftx568765egcd,
                  notes: Event A,
                  start_date: 1/1/01, 
                  end_date: 1/1/01
                } ]

}
然后你可以得到这样的结果: 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());
结果:

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);
});
    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);
 });
{
      _id:cfgvhbjnkmkdcfxghgjklxnmbxhdhjxjhjhgx,
      user: John Doe,
      password: 123,
      events: [ { _id: 1gfye56785g3ycgevhxeftx568765egcd,
                  notes: Event A,
                  start_date: 1/1/01, 
                  end_date: 1/1/01
                } ]

}

你能说得更具体一点吗?当然。。。我想在这个模式中实现一个用于身份验证的用户和密码,但在这个模式中,我还希望有许多eventData块。示例:用户:John Doe密码:123个事件:[{id:1注意:事件A开始日期:1/1/01,结束日期:1/1/01,},{id:2注意:事件B开始日期:1/2/01,结束日期:1/2/01,},{id:3注意:事件C开始日期:1/3/01,结束日期:1/3/01,}]John Doe将注册并访问其事件A,B和C。虽然可能有另一个用户具有不同的事件集合谢谢,先生。这就是我一直在努力理解的,但看到你的例子,现在就更有意义了。Welcome@user258813