MongoDB:从嵌入文档中获取已排序的字段

时间:2015-02-05 04:03:17

标签: mongodb

我的Mongo架构如下所示:

{
    "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]"
    }
}

我需要将'log'(timestamp:message)的字段加载到textarea中,但由于它可能会变大,我想我想要排序和限制作为查询的一部分。

接近这个的正确方法是什么?我尝试过像

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

......但那不起作用。我一直在研究聚合框架,但我不知道这是否是正确的方向。我也不相信这个架构首先是合适的。

1 个答案:

答案 0 :(得分:0)

首先,您的架构存在问题:

  • 长大的文件对mongo不利。不仅最大大小不能大于16mb,事实上你总是会在文档中添加一些新信息,这会导致文件在文件系统上的大量移动(当填充填充时)

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

尽管如此,你可以这样做,如果我是你,我宁愿改变架构以拥有两个集合。你现在拥有的一个(没有日志)而另一个只是记录。