擅长:python、mysql、java
<p>在设计Mongo模式时,需要考虑很多事情,但是通常模式应该反映出如何使用数据。MongoDB博客上的<a href="http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1" rel="nofollow noreferrer">6 Rules of Thumb for MongoDB Schema Design</a>系列文章是一个良好的开端。在</p>
<p>我的第一个想法是将您的文档“从里到外”存储在一个集合中:</p>
<pre><code>{ date: new Date(1417996800000), owner: "AS3320 Deutsche Telekom AG", ip: "82.148.15.23", views: 844 },
{ date: new Date(1417996800000), owner: "AS29314 VECTRA S.A.", ip: "173.235.42.25", views: 458 },
...
</code></pre>
<p>这样你就不会限制你每天可以拥有多少个独特的用户。如果您正在索引<code>date</code>字段,按日期查找访问者仍然是有效的。在</p>
<p>如果您不经常使用<code>owner</code>字段,也许它也可以移动到它自己的集合中。在</p>
^{pr2}$
<p>显然,这可能不是一个明确的答案,但这可能不是一个明确的开始。在</p>
<p>关于在编写文档之前检查文档的大小(我认为这并不是解决糟糕的模式设计的好方法)。MongoDB在内部将数据作为BSON处理,因此您可以使用<a href="https://pypi.python.org/pypi/bson/0.3.3" rel="nofollow noreferrer">^{<cd3>} module</a>:</p>
<pre><code>import bson
len(bson.dumps(my_document))
</code></pre>
<p>如果出现“operator maked object too large”错误,请参见<a href="https://stackoverflow.com/questions/11224942/mongodb-update-with-upsert-fails">this question</a>。在</p>