2013-08-03 2 views
1

У меня есть следующая схема:мангуст сохранить встроенный документ

var StorySchema = new Schema({ 
    title:  { type: String, required: true }, 
    users:  { 
        id:  { type: Schema.ObjectId, ref: 'Users' }, 
        creator: { type: Boolean } 
       },  
    maxlines:  { type: Number, default: '10'}, 
    lines:  { 
        text:  { type: String }, 
        entered_at: { type: Date }, 
        user:  { 
           id: { type: Schema.ObjectId, ref: 'Users' } 
           } 
       }, 
    created_date: { type: Date, default: Date.now }, 
    updated_date: { type: Date, default: Date.now },   
}) 

Я хочу передавать данные в lines и я пытаюсь сделать это с ниже обновление:

exports.update = function (req, res) { 
    Stories 
    .findOne({ _id: req.params.id }, function (err, story) { 
      if (err) { 
       res.json(200, { 
        success: "false", 
        message: err.message 
       }) 
      } else {  
     story.maxlines = story.maxlines - 1 
     story.lines.push ({ 
      text : req.body.text, 
      'user.id' : req.headers.id, 
      entered_at : new Date().toISOString() 
     }) 
     story.save(function(err, story) { 
       if (err) { 
       res.json(200, { 
        success: "false", 
        message: err.message 
       }) 
      } else if (story) { 
       res.json({ 
        sucess: "true", 
        message: story 
       }) 
      } 
     }) 
     } 

    }) 

} 

я получаю ошибку TypeError: Object { user: {} } has no method 'push', не совсем уверен, как обновлять линии и пользователя, связанные с линией

ответ

1

Потому что story.lines не является массивом. Вы, вероятно, необходимо обновить схему для преобразования строки в массиве типа таким образом:

var LineSchema = new Schema({ 
    text: { 
     type: String 
    }, 
    entered_at: { 
     type: Date 
    }, 
    user: { 
     id: { 
      type: Schema.ObjectId, 
      ref: 'Users' 
     } 
    } 
}); 

var StorySchema = new Schema({ 
    title: { 
     type: String, 
     required: true 
    }, 
    users: { 
     id: { 
      type: Schema.ObjectId, 
      ref: 'Users' 
     }, 
     creator: { 
      type: Boolean 
     } 
    }, 
    maxlines: { 
     type: Number, 
     default: '10' 
    }, 
    lines: [LineSchema], 
    created_date: { 
     type: Date, 
     default: Date.now 
    }, 
    updated_date: { 
     type: Date, 
     default: Date.now 
    }, 
}) 
+0

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

+0

Исправить. Вы можете только «нажимать» на массив, но не на общий объект – zsong

+0

На моем StorySchema у меня также есть «Пользователи:», которые в настоящее время заполняются «id», где 'id' заполняется как' _id' из таблица пользователей. Но для истории может быть несколько пользователей. Однако, если я изменю его на '[UserSchema]', это будет означать, что мне нужно будет хранить полные данные пользователя, которые я не хочу. Вы бы рекомендовали создать еще один '[UserStorySchema]', который просто имеет 'id' как нечто вроде моста типа схемы или есть лучший способ? – Tam2

Смежные вопросы