Być może nadszedł czas, może to ja tonę w rzadkiej dokumentacji i nie jestem w stanie owinąć głowy koncepcją aktualizacji w Mongoose :)
Oto oferta:
Mam schemat i model kontaktu (skrócone właściwości):
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);
Otrzymuję żądanie od klienta, zawierające pola, których potrzebuję i w ten sposób używam mojego modelu:
mongoose.connect(connectionString);
var contact = new Contact({
phone: request.phone,
status: request.status
});
A teraz dochodzimy do problemu:
- Jeśli zadzwonię
contact.save(function(err){...})
, otrzymam błąd, jeśli kontakt z tym samym numerem telefonu już istnieje (zgodnie z oczekiwaniami - niepowtarzalny) - Nie mogę zadzwonić
update()
na kontakt, ponieważ ta metoda nie istnieje w dokumencie - Jeśli wywołam aktualizację na modelu:
Contact.update({phone:request.phone}, contact, {upsert: true}, function(err{...})
dostanę się do nieskończonej pętli, ponieważ implementacja aktualizacji Mongoose wyraźnie nie chce, aby obiekt był drugim parametrem. - Jeśli zrobię to samo, ale w drugim parametrze przekażę tablicę asocjacyjną właściwości żądania,
{status: request.status, phone: request.phone ...}
to działa - ale wtedy nie mam odniesienia do konkretnego kontaktu i nie mogę znaleźć jegocreatedAt
iupdatedAt
właściwości.
Więc w końcu, po wszystkim, co próbowałem: biorąc pod uwagę dokument contact
, jak go zaktualizować, jeśli istnieje, lub dodać, jeśli nie istnieje?
Dziękuję za Twój czas.
pre
zasave
?