C'est peut-être le moment, c'est peut-être moi qui me noie dans une documentation clairsemée et je ne peux pas me concentrer sur le concept de la mise à jour dans Mongoose :)
Voici l'affaire:
J'ai un schéma et un modèle de contact (propriétés raccourcies):
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);
Je reçois une demande du client, contenant les champs dont j'ai besoin et utilise ainsi mon modèle:
mongoose.connect(connectionString);
var contact = new Contact({
phone: request.phone,
status: request.status
});
Et maintenant nous arrivons au problème:
- Si j'appelle,
contact.save(function(err){...})
je recevrai une erreur si le contact avec le même numéro de téléphone existe déjà (comme prévu - unique) - Je ne peux pas faire appel
update()
au contact, car cette méthode n'existe pas sur un document - Si j'appelle mise à jour sur le modèle:
Contact.update({phone:request.phone}, contact, {upsert: true}, function(err{...})
j'entre dans une boucle infinie de certaines sortes, car l'implémentation de la mise à jour Mongoose ne veut clairement pas un objet comme deuxième paramètre. - Si je fais de même, mais dans le deuxième paramètre, je passe un tableau associatif des propriétés de la demande,
{status: request.status, phone: request.phone ...}
cela fonctionne - mais alors je n'ai aucune référence au contact spécifique et ne peux pas trouver ses propriétéscreatedAt
etupdatedAt
.
Donc, le résultat, après tout, j'ai essayé: étant donné un document contact
, comment puis-je le mettre à jour s'il existe, ou l'ajouter s'il ne l'est pas?
Merci pour votre temps.
pre
poursave
?