Mongodb 蒙戈文件草稿

Mongodb 蒙戈文件草稿,mongodb,database-design,Mongodb,Database Design,假设我有一个Mongo集合和一个web应用程序来在Internet上查看集合。当我编辑收藏(即添加、删除和更新文档)时,我所做的更改将立即在Internet上可用 现在,我想将我所有的更改保存为草稿,当我想让它可用时,我会明确地发布草稿 简单的实现是添加一个新的草稿集合。我仅编辑此草稿集,当我按下“发布”按钮时,草稿集将复制到原始集合 到目前为止还不错,但是这个解决方案是不可伸缩的,因为拷贝的时间是集合大小的函数。您是否建议另一种解决方案?如果文档是草稿,则在每个文档中设置一个草稿字段。比如:

假设我有一个Mongo集合和一个web应用程序来在Internet上查看集合。当我编辑收藏(即添加、删除和更新文档)时,我所做的更改将立即在Internet上可用

现在,我想将我所有的更改保存为草稿,当我想让它可用时,我会明确地发布草稿

简单的实现是添加一个新的草稿集合。我仅编辑此草稿集,当我按下“发布”按钮时,草稿集将复制到原始集合


到目前为止还不错,但是这个解决方案是不可伸缩的,因为拷贝的时间是集合大小的函数。您是否建议另一种解决方案?

如果文档是草稿,则在每个文档中设置一个草稿字段。比如:

title:"FooBar blah blah",
draft:true

单击按钮发布文章时,您只需更新单个文档-该文章的文档将草稿更改为false或
$unset
将其更改。选择要显示哪些文档的查询必须检查草稿:{$ne:true}——请注意,这将匹配草稿设置为false的文档和根本没有草稿字段的文档。这样,您就可以不使用当前文档,而不需要更新所有文档来拥有此字段。

从功能上讲,建议的琐碎实现是错误的。为了公开单个文档,需要在整个集合中进行复制—仅将完成的草稿文档复制到生产集合中不是很简单吗?@AsyaKamsky用户可以在发布所有草稿文档之前添加、删除和更新多个草稿文档。我担心博客是一个糟糕的例子,所以我将从问题中删除它。不过,为什么不在文档中设置一个“草稿”字段呢?当你想激活它们时,你会将其翻转吗?@wiredpairie请看我对Аааanswer的评论这甚至适用于多人的多个草稿。每个文档可以发布也可以不发布。谢谢。如果删除文档,
草稿
标记是否有效?请注意,我指的不是一份文件草案。用户可以在发布前添加、删除和更新多个文档。此外,为草稿和已发布的文档保留两个单独的集合可能是有意义的。草稿可以针对单用户读/写进行优化,并针对高并发只读进行发布。@Michael-我不明白-你了解Mongo如何使用内存和锁吗?有相当多的信息可用:有两个集合是没有帮助的。拥有多个数据库可能有助于锁定一点,但这似乎是过早的,而且是不必要的优化。如果“删除”的意思是将其作为草稿删除,那么它就没有真正的意义-为什么要在实际删除之前标记某个已删除的内容?即使这样,您也可以使用草稿字段和已发布字段来实现这一点。还是使用版本号和草稿字段,并考虑用草稿的最高版本:错误发布?在任何情况下,使用两个集合并进行大量重命名都是没有意义的,因为这将大大低于更新单个文档的效率。@WiredPairie我同意两个单独的数据库可能会过早进行可能不必要的优化。谢谢您的链接。@AsyaKamsky关于删除:用户可以从集合中删除多个文档。删除后,他将看不到删除的文档,但这些文档仍然可以在Internet上找到。仅当用户发布集合时,它们才可用。