使用gridfs处理mongodb中的文件

时间:2017-05-10 16:21:49

标签: mongodb gridfs

带有gridfs的mongodb中的Handeling文件

我有以下问题,我试着找到一个多星期的答案,并且在网上找不到任何有趣的答案:

1)是否可以通过gridfs 2将同一mongofile请求中的不同文件插入到mongo数据库中?文件是否可以与uniq files_id

相同

2)我有用户收集,每个用户都有一个或多个上传到mongodb的文件。是否可以在用户和文件之间建立链接?我想知道哪个文件属于每个用户。

3)因此可以在用户集合中拥有文件的元数据(默认为fs.files)。例如,看起来像:

{  
   _id:112,
   Firstname:“Mickael”,
   Lasttname:“Jackson”,
   Files:[  
      {  
         _id:5910e57f24f3f7047494720c 
         "filename":"File1",
         "chunkSize":NumberInt(261120),
         "uploadDate":ISODate("2014-04-13T11:32:33.557Z"),
         "md5":"7b762939321e146569b07f72c62cca4f",
         "length":NumberInt(646)
      },
      {  
         _id:1841e57f24f3f7047494720b 
         "filename":"File2",
         "chunkSize":NumberInt(261120),
         "uploadDate":ISODate("2014-04-13T11:32:33.557Z"),
         "md5":"7b762939321e146569b07f72c62cca4f",
         "length":NumberInt(646)
      }
   ]
}

提前感谢您的回答。

2 个答案:

答案 0 :(得分:2)

  1. 是否可以通过gridfs 2将同一mongofile请求中的不同文件插入mongo数据库?这些文件可以具有相同且唯一的files_id。

    即使这是可能的,我也不建议这样做。您应该为每个文件执行一个请求。 不,他们不能拥有相同的独特_id。如果您需要辅助ID,请使用fs.file

  2. 的元数据属性
  3. 我有用户收集,每个用户都有一个或多个文件上传到mongodb。是否可以在用户和文件之间建立链接?我想知道哪个文件属于每个用户。

    是的,您可以在fs.files集合中的用户和文档之间创建链接。 为此,您可以使用DBRefs,https://docs.mongodb.com/manual/reference/database-references/#dbrefs。在user.files中存储fs.files文档的引用的位置 基本上,您可以拥有这样的用户结构,

    {  
        _id:112,
        Firstname:“Mickael”,
        Lasttname:“Jackson”,
        Files:[  //YOU WILL ONLY STORE _id of fs.files
             {
                "$ref" : "fs.files",
                "$id" : ObjectId("5126bc054aed4daf9e2ab772"),//file of id
                "$db" : <database name>
             }
        ]
    }
    

    或者你甚至可以在fs.files中拥有元数据属性并在那里分配用户ID。

    {
         _id:1841e57f24f3f7047494720b 
         "filename":"File2",
         "chunkSize":NumberInt(261120),
         "uploadDate":ISODate("2014-04-13T11:32:33.557Z"),
         "md5":"7b762939321e146569b07f72c62cca4f",
         "length":NumberInt(646)
         "metadata" :{
                user : {
                    "$ref" : "users",
                      "$id" : 112,
                      "$db" : <database name>
                }
    }
    

    请注意,没有类似SQL的约束, 如果删除用户,则还必须删除属于该用户的文件。 否则会有孤儿。

  4. 因此可以在用户集合中拥有文件的元数据(默认情况下为fs.files)。

  5. 我不认为这是可能的。因为fs.files必须是它自己的集合。 此外,在设计方面,这种分离更好。

答案 1 :(得分:0)

{  
   _id:112,
   Firstname:“Mickael”,
   Lasttname:“Jackson”,
   Files:[  
      {  
         _id:5910e57f24f3f7047494720c 
         "filename":"File1",
         "chunkSize":NumberInt(261120),
         "uploadDate":ISODate("2014-04-13T11:32:33.557Z"),
         "md5":"7b762939321e146569b07f72c62cca4f",
         "length":NumberInt(646)
      },
      {  
         _id:1841e57f24f3f7047494720b 
         "filename":"File2",
         "chunkSize":NumberInt(261120),
         "uploadDate":ISODate("2014-04-13T11:32:33.557Z"),
         "md5":"7b762939321e146569b07f72c62cca4f",
         "length":NumberInt(646)
      }
   ]
}

这是您的格式化代码