我有以下网络/ mongodb设置:
1个主mongodb数据库(10.0.0.1
,无法访问
互联网) - 包含集合A中的私人信息和集合
B,由受信任用户创建的文档。在任何时间点,a
用户可以将集合B中的任何文档标记为“公共”,这会发生变化
其属性从{'public':false}
到{'public':true}
。
1个公共mongodb数据库(10.0.0.2
,运行可从中访问的网络服务器
互联网通过反向代理) - 不包含集合A,
但应包含从集合中标记为“公共”的所有文档
B.本机将向外部用户提供这些公共文件
网络。
如何设置mongodb,以便当主数据库(10.0.0.1
)中的文档更新为{'public':true}
时,它会被复制到公共mongodb数据库(10.0.0.2
)?
其他详情:
所以,重申一下,这是一个用例:
John VPN进入我们的专用网络,打开
http://10.0.0.1/
,创建一个 document(称之为D2
),将其标记为私有。约翰然后看到一个更老的 文档D1
,并决定将其公开,方法是单击“制作” 公共'按钮。服务器自动使文档可用 在公共服务器example.com
上(公共IPx.y.z.w
,内部IP10.0.0.2
)。John发送电子邮件给Sarah,并要求她阅读文件D1( 一个被公开的)。莎拉去了
http://example.com
并且是 能够阅读D1
,但永远不会看到D2
。
我的目标是实现这一目标,而无需手动编写脚本来同步这两个数据库。我怀疑它应该是可能的,但我无法从我读过的有关MongoDB复制的内容中找到答案。
我欢迎任何建议。
谢谢!
答案 0 :(得分:2)
MongoDB(截至2.0.6)不支持过滤复制。
但是......你可能有可能实现自己的方案来更新基于tailable cursor MongoDB oplog的记录。本地oplog.rs
上限集合与用于将更改中继到副本集成员的机制相同,并包括插入,删除和更新的详细信息。
有关此技术的示例,请参阅此博文:Creating Triggers for MongoDB。
在您的情况下,操作将类似于:
public:true
public:false