Mongoose - Добавить массив в поддокумент [дубликат]

Перейдите в панель меню Atom -> Пакеты -> Сценарий -> Настроить Scrpit (Или вы можете использовать сочетание клавиш Shift + Ctrl + Alt + O)

Затем введите python3 в команду пространство. Надеюсь, это сработает.

Лучший, Терри

31
задан Pranil Dasika 15 August 2012 в 05:56
поделиться

3 ответа

Устаревшие см. другое решение ниже, используя $ push $ each

Ваш пример близок, но вы хотите $ pushAll , а не $ нажмите , чтобы каждое добавление было добавлено отдельно (вместо того, чтобы нажимать другой массив на массив values):

var Kitten = db.model('Kitten', kittySchema);
Kitten.update({name: 'fluffy'},{$pushAll: {values:[2,3]}},{upsert:true},function(err){
        if(err){
                console.log(err);
        }else{
                console.log("Successfully added");
        }
});
40
ответ дан Scott Stensland 20 August 2018 в 10:53
поделиться
  • 1
    NB: вы также можете посмотреть $ addToSet , который может использоваться только для добавления значений в массив, если они их уже нет. – Stennie 15 August 2012 в 04:39
  • 2
    Спасибо, Стенни! Это работает. Я пропустил эту часть в документации. – Pranil Dasika 15 August 2012 в 05:44
  • 3
    @Stennie это работает только для отдельных элементов, а не для конкатенации массивов. – Tom 24 December 2013 в 18:54
  • 4
    @Stennie, вы должны положить это в качестве ответа, я поддержу вас. – Jason Sebring 16 September 2014 в 04:47
  • 5
    Консолидация массивов @Tom может быть выполнена с помощью $ addToSet вместе с $ each . – super-qua 21 October 2014 в 12:39

(обновление от Dec-2014). Поскольку MongoDB2.4 вы должны использовать:

Kitten.update({name: 'fluffy'}, {$push: {values: {$each: [2,3]}}}, {upsert:true}, function(err){
        if(err){
                console.log(err);
        }else{
                console.log("Successfully added");
        }
});
25
ответ дан Amit Portnoy 20 August 2018 в 10:53
поделиться
  • 1
    Если в нем нет документа с {name: "fluffy"}, создает ли {upsert: true} его ?; также, если я {upsert: true, new: true}, могу ли я выполнить функцию (err, result) {} и получить в результате все документы, которые были созданы / обновлены? – Besto 4 December 2016 в 18:06

Или используйте $ каждый модификатор с помощью $ addToSet:

https://docs.mongodb.com/manual/reference/operator/update/addToSet/#each-modifier

// Existing tags array
{ _id: 2, item: "cable", tags: [ "electronics", "supplies" ] }

// Add "camera" and "accessories" to it
db.inventory.update(
   { _id: 2 },
   { $addToSet: { tags: { $each: [ "camera", "accessories" ] } } }
 )
0
ответ дан Dominic Tobias 20 August 2018 в 10:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: