我想使用 OrientDB 作为 .csv 文件的数据库,并使用 OrientJS 将它们以原始形式存储在记录的二进制字段中。此外,我想将名称和描述存储为字符串。我研究了文档,并能够通过以下方式存储原始二进制记录
var fs = require('fs');
var testcsv = fs.readFile('test.csv',
function(error, data){
if(error) throw error;
var binary = new Buffer(data);
binary['@type'] = 'b';
binary['@class']='CSV';
db.record.create(binary);
})
但是,我发现无法存储具有“二进制”类型字段的记录。我尝试了几种方法,所有方法似乎都不起作用。例如:
var fs = require('fs');
var testcsv = fs.readFile('test.csv',
function(error, data){
if(error) throw error;
var binary = new Buffer(data);
binary['@type'] = 'b';
binary['@class']='CSV';
db.record.create({
'@class': 'Test',
'file': binary,
'name': 'X',
'description': 'Y'
});
})
如果“字段”未声明为“二进制”,则默认情况下将其设置为“嵌入”类型,并且 .csv 为“存储”。如果“字段”被声明为“二进制”,则会引发错误:
Unhandled rejection OrientDB.RequestError: Error on unmarshalling field 'file' in record #22:-1 with value: file: ...
DB name="mydb"
at child.Operation.parseError (...node_modules\orientjs\lib\transport\binary\protocol33\operation.js:864:13)
at child.Operation.consume (...node_modules\orientjs\lib\transport\binary\protocol33\operation.js:455:35)
at Connection.process (...node_modules\orientjs\lib\transport\binary\connection.js:399:17)
at Connection.handleSocketData (...node_modules\orientjs\lib\transport\binary\connection.js:290:20)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:548:20)
当我尝试了许多其他方法时,我一无所知。我是不是误会了什么?非常感谢您的帮助!