2016-01-17 4 views
0

enter image description hereMongoose (массив в массиве) - как вставить?

Здравствуйте, я хотел бы вставить данные в массив «rss». Как я могу это сделать? Вот как добавить новые категории в коллекцию пользователей:

user.findOneAndUpdate({ 
    _id: req.body.ownerId 
    }, 
    { $push: { 
    categories: { 
     name: req.body.categoryName, 
     public: false 
    } 
    }}, 
    { safe: true, upsert: true }, 
    function(err, model) { 
    console.log(err); 
    }); 

Но как я могу добавить что-то в спорте/RSS? Во-первых, мне нужно найти пользователя по id, а во-вторых, мне нужно найти категорию и по id. Как это сделать и, наконец, вставить?

мои переменные: req.body.ownerId - идентификатор пользователя req.body.categoryId - идентификатор категории req.body.url - Новости URL, который я хочу, чтобы вставить в категории массив

Спасибо вам помочь.

+0

Пожалуйста, замените свое изображение кодом, изображенным на картинке. –

+0

Я немного изменил изображение, чтобы сделать его более понятным. Зачем вам нужен код из образа? Это просто из консоли узла. – elzoy

+0

Изображения не должны использоваться, если это абсолютно необходимо. Если в этом нет необходимости, то этого не должно быть. –

ответ

1

Не рекомендуется поддерживать массив в массиве. Часто лучше поддерживать отдельную коллекцию для категорий.

Это говорит, вам необходимо выполнить два запроса: один для заполнения categories массива для пользователя, а другие для заполнения rss массива в categories массиве для того же пользователь.

В первом запросе обновление:

// Populate the 'categories' array. Insert the empty 'rss' array. 
... 
{ $push: 
    categories: { 
    name: req.body.categoryName, 
    public: false, 
    rss: [] 
    } 
} 
... 

Во втором запросе обновление:

// Populate the 'rss' array for the same user. 
... 
{ $push: 
    'categories.$.rss': req.body.url 
} 
... 

Второй запрос на обновление будет выполняться в обратном вызове от первой.

+0

У меня на самом деле была эта же проблема на днях. Таким образом arrayName. $. ArrayName позволяет вам получить доступ к вложенному массиву для обновления (будь то $ push или $ addToSet?) –

+0

Да, это так. Параметр '$' указывает, что вы хотите обновить массив без указания индекса. – gnerkus

+0

Здравствуйте, благодарю вас за ответ. Я ввел «категории» в коллекции пользователей, потому что каждый пользователь будет иметь свои собственные категории (это его собственный организатор). В подобных ситуациях еще лучше сделать категории новой коллекцией? – elzoy

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