Kev*_*vin 6 paging mongoose mongodb nosql mongodb-query
我有这个架构:
article: {
subject,
comments: []
}
Run Code Online (Sandbox Code Playgroud)
如果我有8条评论,并且查询
article.find({}, {
comments: {
$slice: [ -10, 5 ]
}
});
Run Code Online (Sandbox Code Playgroud)
我从索引0到索引4得到注释,
但我只希望因为分页而返回从索引0到索引2的注释.
(第1页$ slice [-5,5]从索引3到索引7,第2页$ slice [-10,5]从索引0到索引2)
现在我必须传递另一个参数"lastId"来比较每个注释并删除"_id"<"lastId",但我认为它有点hacky.
任何人都有一个很好的解决方案吗?
小智 15
所以我要说你应该切换你的架构,将注释留作单独的文件,因为这是一个未绑定的数组,它将使你的查询更有效率.我会解释一下.
当您将嵌入的文档添加到不是固定大小的数组时,mongoDB可能需要随着文档的增长移动文档,更改填充因子并导致碎片(填充因子是mongodb的猜测,你的文档将有多大成长,为这种情况预先分配更多空间).
你也被限制在16MB pr文档中,所以想象一下,如果你得到一个疯狂的流行线程,或者你决定用其他元数据扩展注释,你就可以打破这个障碍.检索大文档也很昂贵且耗时.
通常,如果嵌入式文档不是未绑定的数组,那么它们就很棒.因此,保留前10条评论的列表将会很有效,但保留1000多条评论是不好的.
下面有一些很好的介绍
http://www.10gen.com/presentations/mongodb-berlin/2012/10-key-performance-indicators http://www.10gen.com/presentations/mongosv-2011/schema-design-by-example
我认为有很多工作即将推出架构设计,从长远来看会更有帮助.我认为说实话是最难的.我知道,我花了一些时间来解决与关系模型的差异.
归档时间: |
|
查看次数: |
4330 次 |
最近记录: |