How to push an array of objects into an array in mongoose with one call?

Or use the $each modifier with $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" ] } } }
 )

(Dec-2014 update) Since MongoDB2.4 you should use:

Kitten.update({name: 'fluffy'}, {$push: {values: {$each: [2,3]}}}, {upsert:true}, function(err){
        if(err){
                console.log(err);
        }else{
                console.log("Successfully added");
        }
});

Deprecated see other solution below using $push $each

Your example is close, but you want $pushAll rather than $push to have each value added separately (rather than pushing another array onto the values array):

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");
        }
});

Currently, the updated doc doesn't support $pushAll. It seems to have been deprecated. Now the good choice is to use the combination of $push & $each

an example:

//User schema: {uid: String, transaction: [objects] }
const filter = {"uid": uid};
const update = {
        $push: {
            transactions: {$each: dataarr}
        }
    }
User.updateOne(filter, update, {upsert:true}, (err) => {
        if(err){
            console.log(err)
        }
    })

pass {upsert: true} at options to insert if the filter returns false.