• 关于MongoDB数据库中文件唯一性的问题


    ※重要※——介绍一下我的环境:MongoDB的“win32-x86_64-2008plus-ssl-3.0.5”,MongoVUE版本是1.6.9,VS2010,dll是1.10版本。

    MongoDB中文件的上传

    试验①:使用VUE上传,{本地文件名相同,但文件内容不同},在VUE中直接点击“Add Files”上传文件,此时VUE会检查你的文件名是否重复,若重复就会给出提示“是改名?or还是跳过?”;这里咱们点击‘重命名’完成文件的上传,在VUE中可以看到如图所示:{前三个是我用VUE上传的}

    前两个文件虽然内容不同[MD5值不同],但是仍然不允许同名;而第2个和第3个文件虽然名字不同,但是是同一个图片[MD5值一样];

    这里我的理解是:在VUE管理MongoDB时,上传文件时【文件名不允许相同,对内容不做要求】

    试验②:用程序上传,此时什么也不提示,文件直接上传成功;以下是比较:

    第3,4,5个文件的名字全部相同,但是第3,4个文件的MD5值是相同的,再比较第4,5个文件,虽然名字一样,但是MD5值不同【同名但不同内容】。

    这里我的理解是,程序在上传时不会去判断文件是否同名,只是通过dll库完成文件上传,剩余的由MongoDB来判断【不同文件MD5不同】

    总结:这里我想表达的是怎样在MongoDB中保证文件的唯一性,目的是你从外部来查找文件时通过什么来唯一确定一个文件名。通过以上比较不难发现:文件名和MD5值都不能保证MongoDB中文件唯一,那应该采用什么来保证呢?答案是文件的ObjectID,就是BOSN中的【键值对“_id”和其值】,这个在VUE中鼠标停留在某一条数据上就会有显示,每一个文件的第1个键“_id”的值是不同的。我就不再贴图了,大伙可以自己上传几个文件看一下。

    当然这里还有一个地方需要注意,虽然文件的ObjectID在这个MongoDB中是唯一的,但是MongoDB的ObjectID的生成办法采用的是[时间戳,机器,PID,计数器]而不是GUID,因此这里的ObjectID可不是全球唯一的(或者说全宇宙唯一的**),不能用它来作为Oracle等库的主键。

    【第一次写,可能表达的不清楚,希望各位见谅。有什么错误欢迎指出和探讨】

  • 相关阅读:
    图灵科普系列丛书封面有奖征集(贴图送书)
    图灵2010.03书讯
    博客园图灵杯第4届博问大赛(2.27~3.27)
    asp.net运行原理
    IIS与NET桥梁
    offsetParent解释
    XML 操作类库(开源项目)
    W3C不兼容问题(最根本的原因,及解决方案)
    深入理解JavaScript系列
    HttpApplication对象创建的细节
  • 原文地址:https://www.cnblogs.com/qingtian-jlj/p/4767719.html
Copyright © 2020-2023  润新知