2015-02-05 57 views
0

我蒙戈架构是这样的:的MongoDB:从嵌入文档获取排序字段

{ 
    "name":"Meeting Name", 
    "description":"Description", 
    "uuid":"YPCJaijg", 
    "participants":[ 
     "JLKGZnfFkGvX9DHgz", 
     "Rkhs4cu7LzyejcTYa" 
    ], 
    "log":{ 
     "1423091932927":"Let's do the 10th then", 
     "1423092118662":"Ok, the 10th it is.", 
     "1423092165083":"[Selected:20150210]" 
    } 
} 

我需要加载的“日志”(时间戳:消息)字段到一个文本,而是因为它可能可能会变大,我想我想排序和限制作为查询的一部分。

什么是正确的方法来解决这个问题?我试过类似

db.meetings.find({uuid:"YPCJaijg"},{'log':1,'_id':0}).sort({"log":-1}) 

......但那不行。我一直在研究聚合框架,但我不知道这是否是正确的方向。我也不相信这个模式首先是合适的。所有的

+0

它不能增长* that * large:最大文档大小目前是16兆字节。所以无论是加载它还是处理它的客户端,或者改变你的模式。 –

回答

0

首先,你有一个问题,您的模式:

  • 恒丰文件坏蒙戈。不仅最大尺寸不能大于16mb,事实上你总会在文档中添加一些新的信息会导致文档系统上文档的很多移动(当填充将被填充时)

您可以在$sort during the update operator的推送新值的同时对元素进行排序。这样你就可以在查找过程中将它们排序。如果您想限制子文档中元素的数量,则可以使用$slice projection.

尽管如此,你可以做到这一点,如果我是你,我宁愿改变架构有两个集合。你现在有一个(没有日志)和另一个只是日志。

+0

对,我最初考虑了一个单独的日志集合,但是想从简单的东西开始。会议日志永远不需要接近16mb的任何地方,所以我现在要坚持这个模式,并进行客户端排序。 – T3db0t

+0

为了使用$ sort更新操作符,日志必须是一个对象(文档)的数组,对吧? – T3db0t

+0

@ VirgilDisgr4ce抱歉,我错过了那部分。它应该是一个数组,而不是一个对象。 –