Mongodb嵌入结构与搜索

Mongodb嵌入结构与搜索,mongodb,Mongodb,如果我有一个collection:Visitor,并且我想在其中嵌入一个访问数组,那么它将如下所示: Visitor1 ->Visit 1 ->Visit 2 Visitor2 ->Visit 1 ->Visit 2 访客1 ->访问1 ->访问2 访客2 ->访问1 ->访问2 这是一个好的结构吗 当我有数以百万计的文档时,我必须首先查找访问者,然后添加访问,这种结构有效吗 如何为所有访问者显示所有访问 它的效率取决于您必须经常做什么。结构本身是好的。当你询问一个访问者时,你总是能“免费”

如果我有一个collection:Visitor,并且我想在其中嵌入一个访问数组,那么它将如下所示:

Visitor1 ->Visit 1 ->Visit 2 Visitor2 ->Visit 1 ->Visit 2 访客1 ->访问1 ->访问2 访客2 ->访问1 ->访问2
  • 这是一个好的结构吗
  • 当我有数以百万计的文档时,我必须首先查找访问者,然后添加访问,这种结构有效吗
  • 如何为所有访问者显示所有访问

它的效率取决于您必须经常做什么。结构本身是好的。当你询问一个访问者时,你总是能“免费”得到一个访问者的所有访问,这是最大的优势,所以你能很容易地得到一个访问者的所有访问。这也意味着您不需要一个清除模式的访问集合

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

添加访问:

db.visitors.update({u id:},{$push:{visitors:}})

删除访问:

db.visitors.update({u id:},{$pull:{visitos:{visitId:}})

如果您的意思是显示所有访问者的所有访问组合,那么目前没有直接的方法。您可以使用不同的操作和一些应用程序逻辑来打开单个阵列或使用m/r。在2.2中,将有一个聚合框架可以很好地做到这一点

有一些事情要考虑:

  • 文档有16mb的限制。如果您有足够的访问量达到此限制,则需要单独的访问集合
  • 不可能查询特定访问者的某些访问。您总是查询顶级文档,因此如果用户有14000次访问,而您只需要少数访问,则必须检索整个文档。对于分页,可以使用$slice处理其中的一些访问
  • 如果没有单独的访问集合,使用一次更新修改单个访问者的多个访问可能会很棘手。每次更新只能通过位置运算符$处理一个数组元素
希望有帮助