这是我在这个论坛上的第一篇文章。我有 RDBMS 背景,想学习 MongoDB,这将帮助我将应用程序迁移到 MongoDB。我正在创建两个集合(客户和地址)。
客户收藏
具有姓名、性别、城市、国家、电话、地址等通用信息(应引用另一个集合)。
地址采集
有一系列信息,如当前地址、办公室地址、邮寄地址。我想知道如何添加对另一个集合的引用?考虑到这种情况,客户集合将有一个地址文档,该文档必须包含对地址集合中 id 的引用。
如果有人能给我提供这个模型的示例。这会很棒。先感谢您。
我真的很喜欢使用 mongodb 来存储我的数据,最近我尝试了 GridFS,它确实适合我的用例。
我的问题是空间要求,这看起来很奇怪。我在 Amazon S3 中有大约 107GB 的图像,大约有 100 万个文件(所有图像,大部分是小图像)。我制作了一个简单的 Java 项目,从 S3 下载图像并将它们插入到两个单独的 MongoDB GridFS 集合(单服务器、3.6.5、64 位、Windows Server 2016)中。问题是,当上传/下载完成时,GridFS 集合在服务器上占用超过 300GB 的存储空间。对于此类收藏来说,这是可以接受的还是我应该担心三倍的尺寸?
注意:我只是使用 Java Mongo 驱动程序(Spring Boot)插入图像,没有任何重大更改,问题出在图像块上。我不删除或更新任何图像(不过,我为 MD5 字段定义了唯一索引,以忽略图像重复),因此压缩和修复不会更改集合大小。据我所知,集合并没有过度预分配(我不认为我的问题与此类似:Huge size on mongodb's gridfs. Should I Compact?)
此外,目前它是单个 mongodb 服务器,没有副本集。
非常感谢您的帮助!
我的配置文件是:
systemLog:
destination: file
logAppend: true
path: c:\data\log\mongod.log
storage:
dbPath: c:\data\db
journal:
enabled: true
replication:
replSetName: "rs0"
net:
bindIp: 127.0.0.1
port: 27017
security:
authorization: enabled
Run Code Online (Sandbox Code Playgroud)
并得到一个错误:
2018-07-07T15:40:25.092+0300 E QUERY [thread1] Error: error: {
"operationTime" : Timestamp(0, 0),
"ok" : 0,
"errmsg" : "node is not in primary or recovering state",
"code" : 13436,
"codeName" : "NotMasterOrSecondary",
"$clusterTime" : {
"clusterTime" : Timestamp(0, 0),
"signature" : {
"hash" : BinData(0,"FshG5mLBvAQUizPHXGfCITV4ZKA="),
"keyId" : NumberLong("6573732769795407873")
}
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试导入 mongodb 数据库,并且我一直在使用 mongorestore 命令,导入开始时没有问题,直到出现错误:失败:dbprod.mys_account:创建集合时出错 dbprod.mys_account:运行创建命令时出错:BSON 字段'OperationSessionInfo.create' 是重复字段
我已经尝试过 --drop 选项但没有成功,我从未与 mongodb 合作过……我必须澄清一下,我使用 mongodump 将它保存在 mongodb 2.4 中,并尝试为 mongodb 3.6 导入