0

私は、 "replacedStatus"フィールドに、そのフィールドのステータスが、クエリの更新によって置き換えられる前に、その値を動的に渡すのに苦労しています。変数$ステータスを集計クエリで使用されているように使用しようとしましたが、実際には更新前の状態ではなく、値$ statusで更新されるドキュメントとして機能しませんでした。私はMongodbの2.6.9バージョンを使用しています。mongodbは現在の値を再利用しています

私はあなたが私を助けることができる場合、私はみんなに感謝したい。この

db.getCollection('charges'). 
update({ 
    'supports.dest': ObjectId("5880eb0c426c9b0400e1016a"), 
    "date": { 
    "$gte": new Date(2017, 11), 
    "$lt": new Date(2017, 12) 
    }, 
    "status": { 
    "$nin": ["Captured"] 
    } 
}, { 
    "$set": { 
    "status": "BillingSuspended", 
    "replacedStatus": "$status" 
    }, 
    "$push": { 
    "logs": { 
     "replacedStatus": "Captured", 
     "date": new Date('2017-12-13T22:00:00.000Z') 
    } 
    } 
}, { 
    "multi": true 
}) 

をしようとしています。

答えて

0

$renameオペレーターはここにあなたの友人です。

db.getCollection('charges'). 
update({ 
    'supports.dest': ObjectId("5880eb0c426c9b0400e1016a"), 
    "date": { 
    "$gte": new Date(2017, 11), 
    "$lt": new Date(2017, 12) 
    }, 
    "status": { 
    "$nin": ["Captured"] 
    } 
}, { 
    "$rename": { 
    "status": "replacedStatus" // rename status --> replacedStatus to capture old value 
    }, 
    "$set": { 
    "status": "BillingSuspended", 
    }, 
    "$push": { 
    "logs": { 
     "replacedStatus": "Captured", 
     "date": new Date('2017-12-13T22:00:00.000Z') 
    } 
    } 
}, { 
    "multi": true 
}) 
+0

私は、次のエラー@dnicklessを持っている: は、スクリプトの実行に失敗しました以下は、あなたが軌道に乗る必要があります。 エラー:オブジェクトに対してupsertおよびmultiを指定する場合、4番目の引数は空でなければなりません。 : [email protected]/mongo/shell/collection.js:522:1 [email protected]/mongo/shell/collection.js:552:18 @(シェル):1:1 –

+0

私の悪い、私はソリューション内の余分な括弧を持っていた。もう一度お試しください。ごめんなさい。 – dnickless

+0

私は@dnicklessを助けてくれてありがとう、しかし、今私は次のエラーがあります: "ステータスと 'ステータス'同時に更新することはできません" –

関連する問題