多分それは時間です、おそらくそれは私がまばらなドキュメンテーションに溺れていて、Mongooseでの更新の概念に頭を抱えることができないことです:)
ここに取り引きがあります:
連絡先のスキーマとモデル(短縮されたプロパティ)があります。
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);
必要なフィールドを含むクライアントからのリクエストを受け取り、モデルを使用します。
mongoose.connect(connectionString);
var contact = new Contact({
phone: request.phone,
status: request.status
});
そして今、私たちは問題に到達します:
- 私は呼び出す場合
contact.save(function(err){...})
、同じ電話番号と連絡先が既に存在する場合、私はエラーを受け取ります(期待通り-ユニーク) update()
そのメソッドはドキュメントに存在しないため、連絡先を呼び出すことはできません- モデルに対してupdateを呼び出すと
Contact.update({phone:request.phone}, contact, {upsert: true}, function(err{...})
、Mongooseのupdate実装は2番目のパラメーターとしてオブジェクトを明らかに必要としないため、ある種の無限ループに入ります。 - 私は同じことを行うが、2番目のパラメータで、私は、要求のプロパティの連想配列を渡した場合
{status: request.status, phone: request.phone ...}
、それは動作しますが-が、その後、私は、特定の連絡先への参照を持っていないし、その見つけることができませんcreatedAt
し、updatedAt
プロパティを。
つまり、結局のところ、私が試した結果、ドキュメントが与えられたcontact
場合、それが存在する場合はどのように更新し、存在しない場合は追加するのでしょうか。
御時間ありがとうございます。
pre
はsave
どうですか?