1

nodejsネイティブドライバーを使用してmongo dbのドキュメントを更新しようとしています。

最初は次のように挿入されました:

matches {
    _id:2001,
    requester:"MITH",
    accepter:"NIKK",
    toss:"MITH",
    bat:"NIKK",
    scores:{"MITH":220},
    status:0,
    won:"MITH"
}

"NIKK":198ここで、スコアオブジェクトに新しい要素を挿入して作成する必要があるドキュメントを更新する必要がありますscores:{"MITH":220,"NIKK":198}

問題は、キーが変数にしか入らないことです。そして私が更新するとき、それは更新されていません

以下は私が試しているコードです

var _jsonMatch = {status:4};
var _scorepush = {}
_scorepush[variablevalue] = 198; // variablevalue in reference above is NIKK
var data = {"$set": _jsonMatch,"$push": {"scores":_scorepush} }
mith.findAndModify({_id:mith.db.bson_serializer.ObjectID.createFromHexString(matchId)},
        [],
        data,
        { upsert: true,new:true },
        function(error, match){ 
          if( error ) callback(error);
          else callback(null, match);
        });

編集

$addToSet代わりに試してみまし$pushたが、データが未定義のコールバックで以下のエラーが発生しました。

{ [MongoError: 非配列に $addToSet 修飾子を適用できません] 名前: 'MongoError', lastErrorObject: { err: '非配列に $addToSet 修飾子を適用できません', コード: 12591, n: 0, connectionId: 56, ok : 1 }, errmsg: '$addToSet 修飾子を非配列に適用できません', ok: 0 } undefined

4

2 に答える 2

0

$set代わりに欲しいと思います$push

var _jsonMatch = {status:4};
var _scorepush = {}
_scorepush[variablevalue] = 198; // variablevalue in reference above is NIKK
_jsonMatch["scores"] = _scorepush;
var data = {"$set": _jsonMatch };
mith.findAndModify({_id:mith.db.bson_serializer.ObjectID.createFromHexString(matchId)},
        [],
        data,
        { upsert: true,new:true },
        function(error, article){ 
          if( error ) callback(error);
          else callback(null, article);
        });
于 2013-01-18T06:27:48.580 に答える