Vielleicht ist es an der Zeit, vielleicht ertrinke ich in spärlicher Dokumentation und bin nicht in der Lage, mich mit dem Konzept der Aktualisierung in Mongoose zu beschäftigen :)
Das ist der Deal:
Ich habe ein Kontaktschema und ein Modell (verkürzte Eigenschaften):
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);
Ich erhalte vom Kunden eine Anfrage mit den Feldern, die ich benötige, und verwende mein Modell folgendermaßen:
mongoose.connect(connectionString);
var contact = new Contact({
phone: request.phone,
status: request.status
});
Und jetzt erreichen wir das Problem:
- Wenn ich
contact.save(function(err){...})
anrufe, erhalte ich eine Fehlermeldung, wenn der Kontakt mit derselben Telefonnummer bereits vorhanden ist (wie erwartet - eindeutig). - Ich kann keinen
update()
Kontakt anrufen , da diese Methode in einem Dokument nicht vorhanden ist - Wenn ich update für das Modell aufrufe:
Contact.update({phone:request.phone}, contact, {upsert: true}, function(err{...})
Ich gerate in eine Endlosschleife, da die Implementierung des Mongoose-Updates eindeutig kein Objekt als zweiten Parameter haben möchte. - Wenn ich dasselbe mache, aber im zweiten Parameter ein assoziatives Array der Anforderungseigenschaften übergebe
{status: request.status, phone: request.phone ...}
, funktioniert es - aber dann habe ich keinen Verweis auf den spezifischen Kontakt und kann seinecreatedAt
undupdatedAt
Eigenschaften nicht herausfinden .
Nach dem Fazit habe ich also versucht: contact
Wenn ich ein Dokument gegeben habe , wie aktualisiere ich es, wenn es existiert, oder füge es hinzu, wenn es nicht existiert?
Vielen Dank für Ihre Zeit.
pre
fürsave
?