#node.js #mongoose
#node.js #мангуст
Вопрос:
Спасибо за вашу помощь и драгоценное время. Как вы предположили, я создал схему, как показано ниже. Теперь я хочу получить записи на основе имени клиента, чтобы рассчитать часы, потраченные ими на каждую категорию. Пожалуйста, помогите мне в этом. Заранее спасибо.
/* var query = {‘расписания [0].категории [0].catname’:»Admin»} // Я хочу получить все записи или документы с помощью категории admin */
Timesheet = new Schema({
created: {type: Date, default: Date.now},
categories: [{
catname: String,
custname: String,
hours: Number
}]
});
User = new Schema({
name: { type: String, required: true },
email:String,
password:String,
type:String,
timesheets: [Timesheet]
});
//timesheets: [{type: mongoose.Schema.Types.ObjectId, ref: 'Timesheet'}
var User = mongoose.model("User",User);
var Timesheet = mongoose.model("Timesheet",Timesheet);
module.exports = function(app) {
var timedata = {
created: new Date('2014-06-05'),
categories:[{catname:"Admin",cusname:"Sony",hours:8}]
}
var user = new User({
name:"Nelson",
email:"nelson@gmail.com",
password:"welcome123",
type:"Solutions"
});
var timesheet = new Timesheet(timedata);
user.timesheets.push(timesheet);
user.save(function(err,user){
console.log(user.timesheets.timesheet);
})
//console.log('category name');
//console.log(user.timesheets[0].categories[0].catname)
var query = {'timesheets[0].categories[0].catname':"Admin"}
// I want to get
all the records or documents with category admin
User.find(query,function(err,catname){
console.log('catname')
console.log(catname)
})
Комментарии:
1. Цель SO не в том, чтобы пользователи редактировали свои вопросы, чтобы они стали ответом, иначе как это может быть кому-то полезно? Вместо этого, пожалуйста, примите ответ, который вы (очевидно) нашли полезным.
Ответ №1:
Чтобы создать дочернюю схему, вы должны сначала определить ее, а затем вставить в свою основную схему. В качестве альтернативы, если вы ожидаете много расписаний, вероятно, предпочтительнее ссылаться на независимую схему. В обоих случаях имело бы смысл присоединить их к пользовательской схеме:
var Timesheet = new Schema({
created: {type: Date, default: Date.now},
categories: [{
name: String,
custname: String,
hours: Number
}]
});
Использование встроенных документов:
var User = new Schema({
timesheets: [Timesheet]
});
Затем вставка может быть выполнена непосредственно с помощью:
// create new timesheet doc using your user doc
var timesheet = user.timesheets.create(myData);
user.timesheets.push(timesheet);
или просто:
user.timesheets.push(data);
Использование документов, на которые ссылаются:
var User = new Schema({
timesheets: [{type: Schema.Types.ObjectID, ref: 'Timesheet'}]
});
вставить с:
// push timesheet reference to your user doc
var timesheet = new Timesheet(data);
user.timesheets.push(timesheet._id);