1

私はmongoose mongodbが初めてで、保存されたデータを更新しようとしています。私はここのAPIで例を試しました: http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdateしかし、それを正しく行っていないようです。データを照会して更新するように指示されています。次のことができます。

Model.findOne({ name: 'borne' }, function (err, doc) 
{
  if (err) ..
  doc.name = 'jason borne';
  doc.save(callback);
});

私はこれをやっています:

user.find({ 'username': Username, 'code': Key}, function(err, check){
    var callback5;
    if((String(check)) === "")
    {
        res.json('nope');
    }
    else
    {
        banned: true;
        user.save(callback5);
        res.json('yep');
    }
})

結果のクエリデータを返しますが、ブール値「禁止」の値を更新するコードを追加すると、エラーが発生します。私は何を間違っていますか?

4

1 に答える 1

5

user変数は Model オブジェクトであり、達成しようとしているのは、指定されたユーザー名とコードを持つ単一のユーザーを見つけ、そのユーザーの禁止されたプロパティを true に設定することであると想定しています。

まずuser.find、単一のユーザーだけでなく、ユーザーの配列を返すため、user.findOne代わりに使用する必要があります。

user.findOne({ username: Username, code: Key}, function(err, userDoc) {
    if (err)
    {
        // TODO: Handle the error!
    }
    if (! userDoc)
    {
        res.json('nope');
    }
    else
    {
        userDoc.banned = true;
        userDoc.save(function (err) {
            if (err)
            {
                // TODO: Handle the error!
            }
            res.json('yep');
        });
    }
})

これは、ユーザー名とコードに一致する単一のドキュメントをデータベースに照会します。userDocnull の場合、res.json('nope')発生します。

次に、コードは のbannedプロパティをuserDoctrue に設定し、ドキュメントをデータベースに保存します。save関数は非同期であるため、res.json('yep')コードをコールバックに配置する必要があります。そうしないと、実際に発生したかどうかがわかりません。

私は実際のエラー処理コードを入れていません。それはあなたに任せていますが、標準のコールバック パターンを使用するときは、潜在的なエラーを常に処理する必要があります。


次を使用してこれを実現することもできますfindOneAndUpdate

var conditions = { username: Username, code: Key };
var update = { banned: true };
user.findOneAndUpdate(conditions, update, function (err)
{
  if (err)
  {
      res.json('nope');
  }
  else
  {
      res.json('yep');
  }
})
于 2013-07-04T10:51:21.773 に答える