3

Meteorフレームワークとcoffeescript/nodeを一気に学ぼうとしています。onloadend を使用する単純なファイル アップロード プログラムに取り組んでいます。FileReader の onloadend イベント関数が呼び出されると、ファイルが既に存在するかどうかを判断し、存在する場合は新しいファイル データとバージョンで更新します。

コードは挿入には機能しますが、更新には機能しません。誰か助けてくれませんか?私は週末(私が実験のほとんどを行うとき)だと思うので、答えなしで流星話に投稿しました。

コードスニペット...

file_reader.onloadend = ((file_event) ->
     (event) ->
        f_filename = escape file_event.name
        version = 0
        f_record = null

        f_record = doc_repo.findOne { name: f_filename }

        if f_record && f_record.name
          doc_repo.update
            name: f_filename
            ,
            $set:
              version: 10
        else
          doc_repo.insert
            name: f_filename
            data: event.target.result
            version: 0
    )(file_obj)

エラー

Exception while invoking method '/documents/update' TypeError: Cannot read property 'toBSON' of undefined
    at Function.calculateObjectSize (/usr/local/meteor/lib/node_modules/mongodb/node_modules/bson/lib/bson/bson.js:210:12)
    at BSON.calculateObjectSize (/usr/local/meteor/lib/node_modules/mongodb/node_modules/bson/lib/bson/bson.js:1463:15)
    at UpdateCommand.toBinary (/usr/local/meteor/lib/node_modules/mongodb/lib/mongodb/commands/update_command.js:67:20)
    at Connection.write (/usr/local/meteor/lib/node_modules/mongodb/lib/mongodb/connection/connection.js:138:40)
    at __executeInsertCommand (/usr/local/meteor/lib/node_modules/mongodb/lib/mongodb/db.js:1837:14)
    at Db._executeInsertCommand (/usr/local/meteor/lib/node_modules/mongodb/lib/mongodb/db.js:1912:7)
    at Collection.update (/usr/local/meteor/lib/node_modules/mongodb/lib/mongodb/collection.js:445:13)
    at app/packages/mongo-livedata/mongo_driver.js:178:16
    at Db.collection (/usr/local/meteor/lib/node_modules/mongodb/lib/mongodb/db.js:507:44)
    at _Mongo._withCollection (app/packages/mongo-livedata/mongo_driver.js:51:13)  
4

1 に答える 1

2

Mongo は、更新を行うために必要な 2 番目のパラメーターを取得していないようです。したがって、通常の JavaScript では次のことが期待されます。

collection.update({..selector..}, { .. modifier });

したがって、次のように、モディファイア オブジェクトを中括弧で囲みます。

doc_repo.update
  name: f_filename,
  {
    $set:
      version: 10
  }
于 2013-02-27T22:58:28.117 に答える