48

私はマングースUserモデルを持っています:

var User = mongoose.model('Users',
    mongoose.Schema({
        username: 'string',
        password: 'string',
        rights: 'string'
    })
);

Userモデルの 1 つのインスタンスを見つけて、そのプロパティを変更し、変更を保存したいと考えています。これは私が試したものです(間違っています!):

User.find({username: oldUsername}, function (err, user) {
    user.username = newUser.username;
    user.password = newUser.password;
    user.rights = newUser.rights;

    user.save(function (err) {
        if(err) {
            console.error('ERROR!');
        }
    });
});

Userモデルのインスタンスを検索、変更、保存するための構文は何ですか?

4

6 に答える 6

120

コールバックのuserパラメーターは、 の配列findです。単一のインスタンスを照会する場合findOneの代わりに使用します。find

User.findOne({username: oldUsername}, function (err, user) {
    user.username = newUser.username;
    user.password = newUser.password;
    user.rights = newUser.rights;

    user.save(function (err) {
        if(err) {
            console.error('ERROR!');
        }
    });
});
于 2013-01-07T16:11:21.003 に答える
56

Model.updateを使用しないのはなぜですか? 結局のところ、見つかったユーザーをそのプロパティを更新する以外の目的で使用していません。

User.update({username: oldUsername}, {
    username: newUser.username, 
    password: newUser.password, 
    rights: newUser.rights
}, function(err, numberAffected, rawResponse) {
   //handle it
})
于 2013-01-07T16:12:34.087 に答える
4

非常に重要なことを追加したいと思いました。JohnnyHK メソッドをよく使用しますが、変更がデータベースに保持されない場合があることに気付きました。使っ.markModifiedてみたら効きました。

User.findOne({username: oldUsername}, function (err, user) {
   user.username = newUser.username;
   user.password = newUser.password;
   user.rights = newUser.rights;

   user.markModified(username)
   user.markModified(password)
   user.markModified(rights)
    user.save(function (err) {
    if(err) {
        console.error('ERROR!');
    }
});
});

保存する前に doc.markModified('pathToYourDate') で変更についてマングースに伝えてください。

于 2018-07-22T01:33:57.100 に答える
3

を使用する場合findは、クライアント側で実行する検証の場合と同様です。

findオブジェクトの ARRAY を返します

findOneオブジェクトのみを返します

追加するuser = user[0]と、保存方法が機能しました。

置いたところがこちら。

User.find({username: oldUsername}, function (err, user) {
    user = user[0];
    user.username = newUser.username;
    user.password = newUser.password;
    user.rights = newUser.rights;

    user.save(function (err) {
        if(err) {
            console.error('ERROR!');
        }
    });
});
于 2015-05-08T08:41:25.240 に答える