Mongodb嵌入结构和搜索

时间:2012-02-23 06:04:45

标签: mongodb

如果我有一个集合:访问者和我想在其中嵌入一系列访问,那么它将看起来像这样:

Visitor1
->Visit 1
->Visit 2

Visitor2
->Visit 1
->Visit 2
  • 这是一个很好的结构吗?
  • 当我将拥有数百万份文件时,我将首先寻找访客然后再访问,这种结构是否有效?
  • 如何显示所有访问者的所有访问次数?

1 个答案:

答案 0 :(得分:2)

取决于你必须经常做什么,它可以是高效的。结构本身和本身都很好。当您查询访问者时,您始终可以获得“免费”的单个访问者的所有访问权限,这样您就能轻松获得单个访问者的所有访问权限。这也意味着您不需要访问集合来清理您的架构。

以下是您需要的操作的示例实现:

添加访问次数

db.visitors.update({_id:<visitorId>}, {$push:{visits:<newVisit>}})

删除访问次数

db.visitors.update({_id:<visitorId>}, {$pull:{visits:{visitId:<visitId>}})

如果您打算显示所有访问者的所有访问量,那么目前没有直接的方式。您可以使用不同的操作和一些应用程序逻辑来打开单个数组或使用m / r。在2.2。会有一个聚合框架可以做到这一点。

但有些事情需要考虑:

  • 文件限制为16mb。如果您有足够的访问量来达到此限制,那么您需要单独访问集合。
  • 无法查询特定访客的某些访问。您总是查询顶级文档,因此如果用户有14,000次访问而您只需要特定的几个,则必须检索整个文档。对于分页,其中一些可以通过使用$ slice来处理。
  • 如果没有单独的访问收集,修改单个访问者进行一次更新的多次访问可能会非常棘手。每次更新只能通过位置运算符$。
  • 寻址一个数组元素

希望有所帮助。