ユーザー用に次のモデルがあります。
var UserSchema = new mongoose.Schema({
name: String,
dob: Date,
sex: String,
photo: String,
email: {type: String, index: {unique: true, required: true}},
created: {type: Date, default: Date.now}
});
var User = mongoose.model('Users', UserSchema);
ご覧のとおり、'created' フィールドは現在の日付のデフォルト値を取得するため、新しいユーザーが作成されると自動的に設定されます。
ユーザーの詳細を投稿するときは、次のクエリを使用します。
User.findOneAndUpdate({email: user.email}, user, {upsert: true}, function (err, user) {
if (err) {
return callback (err);
} else {
callback(null, user);
}
});
findOneAndUpdate
withを使用する目的はupsert: true
、既存のプロファイルを返すか、新しいプロファイルを作成することです。また、投稿されたデータに基づいてフィールドを更新します。
ただし、created
作成されたフィールドが投稿されていなくても、フィールドは毎回現在の日付で更新されます。このフィールドが一度だけ設定されるようにするにはどうすればよいですか?
編集
データベースからのオブジェクトの例:
{
"_id" : ObjectId("54620b38b431d48bce7cab81"),
"email" : "someone@google.com",
"__v" : 0,
"name" : "somone",
"sex" : "male"
}
created
アップサートを使用して新しいオブジェクトを作成している間でも、フィールドが設定されていないことがわかりました。ドキュメントに存在しない場合でも、Mongoose はスキーマに基づいて現在の日付を返すだけです。
upsert
したがって、問題は次のようになります: usingが引数で指定されていないフィールドのデフォルト値を作成することを確認するにはどうすればよいですか?