2017-11-30 10 views
0

ファイルシステムをスキャンしようとしています。ファイルがDBにある場合は更新します。そうでない場合は、新しいレコードを挿入します。しかし、私はこのエラーを取得しています "TypeError update()は引数 'upsert'の複数の値を持っています"

私はここで間違っていますか?

def scan_for_file(dir_path, storage_bucket): 
    for file in os.listdir(dir_path): 
     curpath = os.path.join(dir_path, file) 
     if os.path.isfile(curpath): 
      print('found file:', file) 
      print('checking db') 
      collection = db.file_collection 
      cursor = collection.find({'file_path': curpath}) 
      for document in cursor: 
       file_db_id = document['_id'] 
       file_accessed = datetime.datetime.fromtimestamp(os.path.getatime(curpath)) 
       file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath)) 
       file_created = datetime.datetime.fromtimestamp(os.path.getctime(curpath)) 
       file_size = os.stat(curpath).st_size 
       file_convert_size = convert_size(file_size) 
       utc_datetime = datetime.datetime.utcnow() 
       update_id = collection.update_one({'_id': file_db_id}, { 
        "$set": { 
        "file_size": file_convert_size, 
        "file_size_bytes": file_size, 
        "process_datestamp": utc_datetime.strftime("%Y-%m-%d %H:%M:%S"), 
        "file_created": file_created, 
        "file_accessed": file_accessed, 
        "file_modified": file_modified}}, 
        { 
        "$setOnInsert": { 
        "file_path": curpath, 
        "file_name": file, 
        "file_size": file_convert_size, 
        "file_size_bytes": file_size, 
        "process_datestamp": utc_datetime.strftime("%Y-%m-%d %H:%M:%S"), 
        "file_$reated": file_created, 
        "file_accessed": file_accessed, 
        "file_modified": file_modified}}, upsert=True, 
               ) 
       update_id 
       print('ID Updated:', file_db_id) 
       print('updating document id:') 
     else: 
      print('This is not a file:', file) 

答えて

1

として、あなたの更新操作を変更します。あなたのコードは、2個のエラーを持っている

update_id = collection.update_one(
    {'_id': file_db_id}, 
    { 
     "$set": { 
       "file_size": file_convert_size, 
       "file_size_bytes": file_size, 
       "process_datestamp": utc_datetime.strftime("%Y-%m-%d %H:%M:%S"), 
       "file_created": file_created, 
       "file_accessed": file_accessed, 
       "file_modified": file_modified 
     }, 
     "$setOnInsert": { 
       "file_path": curpath, 
       "file_name": file, 
       "file_size": file_convert_size, 
       "file_size_bytes": file_size, 
       "process_datestamp": utc_datetime.strftime("%Y-%m-%d %H:%M:%S"), 
       "file_$reated": file_created, 
       "file_accessed": file_accessed, 
       "file_modified": file_modified 
     } 
    }, 
    upsert=True) 

:まず、あなたがやっている、またdocs

を参照してください$setOnInsert$setのために1つの余分{}それぞれを追加していますupsert=True,。この特別な,を参照すると、これはPythonのタプルになります。

+0

ありがとうございました!最後の数時間は目が見えなかった – JRM

+0

喜んで助けてくれた!余分な "、"はPythonコードの多くのバグの原因です –

関連する問題