2012-03-11 6 views
1

に「findAndModify」を使用して、私は私は私は常にそのドキュメントが「未定義」されます「findAndModify」機能を実行しようとする私のsite.When上のMongoDBを使用します。MongoDBの

function counter(name) { 
    var doc = this.db.collection('counter').findAndModify(
       { query: { _id: name }, 
        update: { $inc: { next: 1} }, 
        new: true, 
        upsert: true }); 

    return doc.next; 
} 

Q:は、私が何をしないのです?

+0

現在実行中のMongoDBと、どのドライバを使用していますか?これをシェルで試してみると、あなたの結果は何ですか? – Bill

+0

私は2.0.3を使用します。シェルをチェックインすると – user541847

答えて

1

upsertがtrueの場合は、findAndModifyは常にドキュメントを返す必要があります。クエリで一致するものがない場合でも、

しかし、shardingとfindAndModifyには制限があります。あなたのクエリには常にシャードキーが含まれている必要があります。これは問題です。

また、このコマンドはバージョン> = 1.3のmongodbで利用できます。古いmongodbを使用している場合は、それを最新のリリース(2.0.3)に更新するだけで動作します。 (私は1.8と2.0でテストしました)

2

MongoDBドキュメントから同じカウンタサンプルコードを実装しようとしたところ、この問題が発生しました。

あなたは、その関数は何も返さないようにコールバックを使用する必要がmongojsドライバー使用している場合:非常に長い時間のために私の頭を壊した後

this.db.collection('counter').findAndModify({ 
    query: { _id: name }, 
    update: { $inc: { next: 1} }, 
    new: true, 
    upsert: true 
    }, 
    function(err, doc){ 
     console.log('the id is: '+doc.next); 
    }); 
-3

を、私は1にソート変更し、 ...

counters.findAndModify({ _id: { $eq: "virtualcurrency" } }, { '_id': 1 }, { $inc: { seq: 1 } }, { new: true }, function (err, result) { 
+0

これが問題の解決方法を説明してください。 – nabinca