Talvez seja a hora, talvez seja eu me afogando em documentação esparsa e não sendo capaz de entender o conceito de atualização no Mongoose :)
Aqui está o acordo:
Eu tenho um esquema e um modelo de contato (propriedades reduzidas):
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var mongooseTypes = require("mongoose-types"),
useTimestamps = mongooseTypes.useTimestamps;
var ContactSchema = new Schema({
phone: {
type: String,
index: {
unique: true,
dropDups: true
}
},
status: {
type: String,
lowercase: true,
trim: true,
default: 'on'
}
});
ContactSchema.plugin(useTimestamps);
var Contact = mongoose.model('Contact', ContactSchema);
Recebo uma solicitação do cliente, contendo os campos necessários e uso meu modelo da seguinte maneira:
mongoose.connect(connectionString);
var contact = new Contact({
phone: request.phone,
status: request.status
});
E agora chegamos ao problema:
- Se eu ligar
contact.save(function(err){...})
, receberei um erro se o contato com o mesmo número de telefone já existir (conforme o esperado - único) - Não consigo ligar
update()
para contato, pois esse método não existe em um documento - Se eu chamar atualização no modelo:
Contact.update({phone:request.phone}, contact, {upsert: true}, function(err{...})
eu entro em um loop infinito de alguns tipos, já que a implementação da atualização do Mongoose claramente não quer um objeto como o segundo parâmetro. - Se eu fizer o mesmo, mas no segundo parâmetro eu passar uma matriz associativa das propriedades do pedido
{status: request.status, phone: request.phone ...}
funciona - mas então eu não tenho nenhuma referência ao contacto específico e não pode descobrir suascreatedAt
eupdatedAt
propriedades.
Então, a questão de fundo, depois de tudo o que tentei: dado um documento contact
, como atualizá-lo, se ele existir, ou adicioná-lo, se não existir?
Obrigado pelo seu tempo.
pre
parasave
?