2017-10-19 12 views
0

MongoDBとそのクエリの新機能ですが、現時点ではコレクション内の '列'を文字列から日付に変更できません。MongoDBの現在の文字列シェルまたはPyMongo

私のデータベースとコレクションはどちらもthdrと呼ばれます。私は列 'PSTNG_DATE'を日付形式に変更したいと思います。現時点ではフォーマットは'19 .10.2017 'です。

MongoDB Compass

私はここのスレッドを経て、もののカップルを試みたが、動作するようには思えません。私は、MongoDBシェルまたはPyMongoを使用して変更することができます。

私はあなたの助けと指導に感謝します。

** UPDATE **それは現時点では私が持っているものだと、それは

私に構文エラーを与える
db = db.getSiblingDB('thdr'); 
var requests = []; 
db.thdr.find().forEach(doc => { 
    var date = yourFunctionThatConvertsStringToDate(doc.PSTNG_DATE); 
    requests.push({ 
     'updateOne': { 
      'filter': { '_id': doc._id }, 
      'update': { '$set': { 
       "PSTNG_DATE": date 
      } } 
     } 
    }); 
    if (requests.length === 500) { 
     db.thdr.bulkWrite(requests); 
     requests = []; 
    } 
}); 

if(requests.length > 0) { 
    db.thdr.bulkWrite(requests); 
} 
+0

https://stackoverflow.com/questions/10942931/converting-string-to-date-in-mongodb – JohnnyHK

答えて

1

あなたはBULKWRITEでそれを行うことができます。

db = db.getSiblingDB('yourDatabaseName'); 
var requests = []; 
db.yourCollectionName.find().forEach(doc => { 
var strDate = doc.PSTNG_DATE; 
var dateParts = strDate.split("."); 
var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]); 
    requests.push({ 
     'updateOne': { 
      'filter': { '_id': doc._id }, 
      'update': { '$set': { 
       "PSTNG_DATE": date 
      } } 
     } 
    }); 
    if (requests.length === 500) { 
     db.yourCollectionName.bulkWrite(requests); 
     requests = []; 
    } 
}); 

if(requests.length > 0) { 
    db.yourCollectionName.bulkWrite(requests); 
} 

あなたがする必要があると思います各文書を更新します。したがって、各文書の更新を行う代わりに、配列requestsupdateOne()収集メソッドを追加し、bulkWrite(...) で実行してください。https://docs.mongodb.com/manual/reference/method/load/のスクリプトをmongodbサーバーに直接ロードして実行してください。お役に立てれば。

FYI:find()の中には、実際にはクエリを追加することができます(特にインデックスフィールドを検索した場合など)。これにより、一度に取り替えられる文書の量と負荷が軽減されます。

+0

の可能な部分は、db名をthdrに変更し、スクリプトを.jsファイルに貼り付けて、loadメソッドを使用しましたmongoシェルで。構文エラーが発生します。 2017-10-19T15:53:15.917 + 0200 E QUERY [thread1] SyntaxError:不正な形式のUnicode 文字エスケープシーケンス@(shellhelp1):1(C:\ Users \ me \ Desktop \ asd \ update2.js) :24 error2:SyntaxError:不正な形式のUnicode文字エスケープシーケンス(シェルヘルパー1):1: 24' –

+0

この「多分?load( "C:\ Users \ me \ Desktop \ asd \ update2.js") –

+0

私は変更された.jsを使用してポストを更新しました。 "dont do the trick –

関連する問題