Depois de algumas horas tentando descobrir onde estava o erro e por que não estava atualizando o banco de dados, descobri que realmente atualizava o banco de dados. O problema era que eu estava verificando a atualização no shell do mongo e depois de atualizá-la sobre a solicitação de postagem do nodejs, ela não apareceu no shell como atualizada. No entanto, quando eu console.log() os rótulos, ele foi atualizado. Então, investiguei mais o problema e descobri que o problema não era o shell do mongo, mas o uso incorreto da atualização do comando do mongoose. Eu estava perdendo o argumento de retorno de chamada. Depois de adicionar a função de retorno de chamada, os dados foram atualizados no shell do mongo imediatamente.
Então ao invés de fazer:
Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true})
Não se deve esquecer de adicionar callback:
Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true}, function(err, affected) {
if(err)
console.log(err)
else
console.log(affected)
// After successful update, redirect here to another page...
Ou como resposta duplicada sugere executar exec():
Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true}).exec()