Express/Node.js — Как сохранить массив объектов в одной модели

Возможный дубликат:
Mongoose — форма сохранить модель со встроенными документами

У меня есть простая схема Mongoose с BlogPosts и Feeds, встроенными в эти BlogPosts. Таким образом, каждый BlogPost может иметь несколько объектов Feed. Прямо сейчас моя HTML-форма позволяет мне правильно сохранить один «канал» при создании сообщения в блоге, НО я хотел бы иметь возможность добавлять много каналов. Как мне изменить свой HTML/контроллер? Спасибо большое!

веб.js

app.post('/blogpost/new', function(req, res){
    var post = new BlogPost(req.body.post)
    post.feeds.push(req.body.feed);
    post.save(function() {
        res.redirect('/blogposts');
    });
});

/блогпост/новый

<form method="post">
    <input type="text" name="blogpost[title]"/>
    <textarea name="feed[name]"></textarea>
    <textarea name="feed[key]"></textarea>
    <textarea name="feed[name]"></textarea>
    <textarea name="feed[key]"></textarea>
</form>

схема

var Feed = new Schema({
  name      : { type: String }
, key       : { type: String }
});

var BlogPost = new Schema({
  title     : { type: String, required: true, index: { unique: true } }
, feeds     : [Feed]
});

Как мне сделать так, чтобы эта форма сохраняла два «канала» в создаваемом объекте блога? прямо сейчас он сохранит One Feed в данных с двумя значениями имени и двумя значениями ключа.

Спасибо большое!


person tuddy    schedule 29.09.2011    source источник
comment
По сути, это тот же вопрос, который вы задали вчера здесь: stackoverflow.com/questions/7586768/   -  person Chance    schedule 29.09.2011
comment
Понятно, но основной вопрос по сути тот же. Я уже пытался ответить на специфику этого вопроса ниже, хотя   -  person Chance    schedule 29.09.2011


Ответы (1)


Когда вы делаете что-то вроде этого:

<textarea name="feed[name]"></textarea>
<textarea name="feed[key]"></textarea>
<textarea name="feed[name]"></textarea>
<textarea name="feed[key]"></textarea>

Вы в основном говорите: «Мне нужно текстовое поле для имени канала, ключа канала, имени канала, ключа канала, который явно неверен. Если бы вы сделали feed[0][name]...feed[1][name], это сказало бы: «Мне нужно текстовое поле для первого канала... я нужно текстовое поле для второго канала"

Поскольку вы разделяете родительский и дочерний объекты, а не обрабатываете их как подобъекты, вам нужно будет вставить каждый из них в blogPost.feeds и сохранить его.

Просто будьте осторожны с этим подходом, особенно при редактировании, потому что вы просто добавляете новые объекты поверх того, что уже может быть существующим массивом каналов.

person Chance    schedule 29.09.2011
comment
круто, фид[0][имя] решил многие мои проблемы. Благодарность... - person tuddy; 29.09.2011