14

私は典型的なスキーマとモデルを持っています:

var mongoose = require('mongoose');

var userSchema = new mongoose.Schema({
    email: String,
    password: String,
    profile: {
        name: String,
        surname: String,
        photo: String
    },
    stats: {
        lastLogin: { type: Date, default: Date.now },
        loginCount: Number,
        lastIP: String
    },
    source: String,
    deleted: Boolean,
    dateCreated: { type: Date, default: Date.now }
});

mongoose.model('User', userSchema);

この更新を実行すると、コールバックを定義した場合にのみ機能し、それ以外の場合は単純に実行され、データベース内の値は変更されません。

User.update({email:'foo@bar.com'}, {$inc: {'stats.loginCount': 1}});

これは機能します:

User.update({email:'foo@bar.com'}, {$inc: {'stats.loginCount': 1}}, function() {});

これはバグですか?コールバックが必要かどうかはドキュメントに記載されていませんが、これを必要とするのは奇妙です...ここに何かが欠けていると思います。

注: 私はテスト提案のために電子メールで照合しています。単純な Express v3.0.6 セットアップで NodeJS v0.8.17 で mongoose v3.5.4 を使用しています。

前もって感謝します。

4

1 に答える 1

28

updateマングースで呼び出す正しい方法は次のとおりです。

User.update(query, update).exec(callback);

この方法でスキップできますcallback:

User.update(query, update).exec();

電話をかけるとき

User.update(query, update)

クエリ オブジェクトを返します。

クエリ オブジェクトを実行する前に操作できるため、データベースにクエリを実行するときに非常に便利です。たとえば、limitクエリにfindを指定できます。

User.find(query).limit(12).exec(callback);

Updateは同じメカニズムを使用しますが、そこではあまり役に立ちません。

于 2013-01-30T21:23:55.520 に答える