尝试一次学习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)
答案 0 :(得分:1)
看起来Mongo没有获得进行更新所需的第二个参数。因此,在常规JavaScript中,它期望这样:
collection.update({..selector..}, { .. modifier });
所以我尝试在修饰符对象周围添加一些花括号,如下所示:
doc_repo.update
name: f_filename,
{
$set:
version: 10
}