2014-12-31 4 views
2

UPDATE:комплекс схем с поддокументом

В настоящее время у меня есть эта схема:

var Schema = new schema ({ 
    name: String, 
    type: { type: String }, 
    date: { type: Date }, 
    descrip: String, 
}); 

Но я использовать эту схему для генерации 2 документа:

THE A TYPE ({ 
    name: 'A', 
    type: 'TYPE_B', 
    date: { type: Date }, 
    descrip: 'DESC_A', 
}); 

THE B TYPE ({ 
    name: 'B', 
    type: 'TYPE_B', 
    date: { type: Date }, 
    descrip: 'DESC_B', 
}); 

Названия, типа и ОПИСАНИЕ являются всегда то же самое в типах A и B, единственное, что меняется, - это поле даты, поэтому я думал, как я могу это улучшить? Как я могу вставить несколько дат в одну и ту же схему, а не создавать всегда документ с тем же именем, типом и описанием?

Так что я пытаюсь создать схему внутри другой схемы, но я не знаю, возможно ли это, это так?

Я пытался так:

var mainSchema = new schema ({ 
    name: String, 
    type: { type: String }, 
    date: [ dateSchema ], 
    descrip: String, 
}); 

var dateSchema = new Schema ({ 
    date: { 
    type: Date 
    } 
}); 

Что я хочу, это создать два mainSchema, тип А и тип, и вставить даты внутри ...

я делаю это право? Как я могу достичь своих целей?

Я ищу полный ответ с хорошим объяснением, вот почему щедрость. Я не принимаю ответы +/-.

+0

Можете ли вы изменить свой вопрос, чтобы включить образец документа, который показывает, как вы хотите, чтобы он выглядел? Непонятно, что вы ищете. – JohnnyHK

+0

всего в секундах @JohnnyHK –

+0

сделано @JohnnyHK .. можно понять сейчас? –

ответ

1

Если ваш код записать в один раздел будет выглядеть следующим образом

var mainSchema = new schema ({ 
    name: String, 
    type: { type: String }, 
    date: [ {date: { type: Date } } ], 
    descrip: String, 
}); 

Я думаю, что это неправильно. Также вам не нужен creat new schema вот так, вы можете использовать только {} в вашем коде http://www.w3schools.com/js/js_objects.asp. Я думаю, что правильный код должен выглядеть так:

var mainSchema = { 
name: string, 
date: {}, 
descrip: string 
} 

А затем введите «дату» ваших дат. Удачи.

=============== КАК ПОЛЬЗОВАТЬСЯ ========================== ====

Извините за задержку. Вы можете использовать mainSchema.date.date_1 = date; или можете внести изменения date: {}, в date: [], и использовать mainSchema.date.push(date) в зависимости от ваших потребностей.

+0

Я не знаю, понял ли я ваш ответ .. как нажать новую дату вступления на схему? –

+0

Вы можете улучшить свой ответ @ winston86? –

6

Чтобы создать запись с несколькими датами, вы можете использовать массив дат.

var mainSchema = new schema ({ 
name: String, 
type: { type: String }, 
dates: [Date], 
descrip: String, 
}); 

Документы будут следующими

THE A TYPE ({ 
name: 'A', 
type: 'TYPE_B', 
dates: ["2014-01-22T14:56:59.301Z","2015-01-22T14:56:59.301Z"], 
descrip: 'DESC_A', 
}); 

THE B TYPE ({ 
name: 'B', 
type: 'TYPE_B', 
dates: ["2015-01-22T14:56:59.301Z","2014-01-22T14:56:59.301Z"], 
descrip: 'DESC_B', 
}); 

Код: http://mongoosejs.com/docs/schematypes.html

Для экономии документ, который вы можете использовать как.

exports.save = function(req,res){ 
var test = new newSchema; // new object for newSchema domain. 
test.name= req.body.name; 
test.type= req.body.type; 
test.desc= req.body.desc; 
if(req.body.date){ 
    req.body.forEach(function(date){ // For every element of date from client. 
     test.date.push(date) // This pushes each and every date given from the client into the date array. 
    }) 
} 
test.save(function (saveErr, saved) { // Saves the new document into db. 
    if (saveErr) { 
     console.log(saveErr) 
     return; 
    } 
    res.status(HttpStatus.OK).json(saved); 
}); 
}; 

Для Update вы можете использовать подобное.

exports.update = function(req,res){ 
newSchema.findOne({name: 'B'},function(err,test){ // Finds a record with name:'B' and stores in test the same can be done for name:'A'. 
    if(test){ 
     if(req.body.date){ 
      req.body.forEach(function(date){ 
       test.date.push(date) // pushes dates into existing test document (update). 
      }) 
     } 
     test.save(function (saveErr, saved) { // Saves (updates) the document. 
      if (saveErr) { 
       console.log(saveErr) 
       return; 
      } 
      res.status(HttpStatus.OK).json(saved); 
     }); 
    } 
}); 
}; 

Надеюсь, это поможет.

+0

Я предлагаю щедрость, можно ли быть более конкретным? Как я могу вставить новые даты, не удаляя старые? –

+0

Ожидание .. @SUNDARRAJANK –

+0

Пожалуйста, посмотрите на документы: [Mongoose - API для массивов] (http://mongoosejs.com/docs/api.html#types-array-js) - может быть, это может быть какая-то помощь, но Я также думаю, что идея @SUNDARRAJANK кажется хорошей и простой. –