8

ユーザー用に次のモデルがあります。

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);
            }
        });

findOneAndUpdatewithを使用する目的はupsert: true、既存のプロファイルを返すか、新しいプロファイルを作成することです。また、投稿されたデータに基づいてフィールドを更新します。

ただし、created作成されたフィールドが投稿されていなくても、フィールドは毎回現在の日付で更新されます。このフィールドが一度だけ設定されるようにするにはどうすればよいですか?

編集

データベースからのオブジェクトの例:

{
    "_id" : ObjectId("54620b38b431d48bce7cab81"),
    "email" : "someone@google.com",
    "__v" : 0,
    "name" : "somone",
    "sex" : "male"
}

createdアップサートを使用して新しいオブジェクトを作成している間でも、フィールドが設定されていないことがわかりました。ドキュメントに存在しない場合でも、Mongoose はスキーマに基づいて現在の日付を返すだけです。

upsertしたがって、問題は次のようになります: usingが引数で指定されていないフィールドのデフォルト値を作成することを確認するにはどうすればよいですか?

4

2 に答える 2