如何使用TmongoWire插入和加载TFileStream

时间:2013-10-18 14:47:02

标签: delphi mongodb

我使用Delphi和TmongoWire。我想在MongoDb服务器上插入TFileStream (picture, pdf) TmongoWire。我的工作基于此演示文件:Delphi MongoDB driver

 d:=BSON([
  'id',mongoObjectID,
  'name',ItemForm.txtName.Text,
  'address',ItemForm.txtAddress.Text,
  'phone',ItemForm.txtPhone.Text,
  'picture', TFileStream.Create('C:\temp\mongotest.jpeg', fmOpenRead or fmShareDenyWrite)
]);
FMongoWire.Insert(mwx1Collection,d);
//LoadItems;
LoadItem(ListView1.Items.Add,d);
UpdateCount;}

插入流文件不起作用,有人能看出原因吗?

程序无法编译:错误 - >无法使用这些参数调用BSON

插入简单的文本字段(下面的代码)没有问题:

    d:=BSON([
  'id',mongoObjectID,
  'name',ItemForm.txtName.Text,
  'address',ItemForm.txtAddress.Text,
  'phone',ItemForm.txtPhone.Text
  ]);

由于

2 个答案:

答案 0 :(得分:0)

MongoDB拥有自己的子系统,专门用于存储(大型)文件:GridFS

在此处查看更多内容:http://docs.mongodb.org/manual/core/gridfs/

以及使用它的TMongoStream对象:https://github.com/stijnsanders/TMongoWire/blob/master/mongoStream.pas

(为了完整起见:Delphi本身并不知道如何将TFileStream转换为Variant,这会导致错误。)

答案 1 :(得分:0)

请参阅本教程:http://owlyci.com/docs/articles/WorkingWithGridFS

在GridFS中,文件由名称引用(或在极少数情况下为_id),因此您应该使用某些文件名(aaa.jpg,81276482634823.dat或任何其他文件)将流保存到GridFS,然后将此文件名存储到您的集合中< / p>

d:=BSON([
  'id',mongoObjectID,
  'name',ItemForm.txtName.Text,
  'address',ItemForm.txtAddress.Text,
  'phone',ItemForm.txtPhone.Text,
  'picture', 'aaa.jpg'
]);