2014-10-01 15 views
0

我正在阅读一篇关于聚合的文章,以解决我的问题,但我不确定它是否适合我的情况,或者我需要重新建模我如何存储数据。使用MongoDB,我可以在父文档上排序,然后在子数组上排序吗?

考虑以下文件:

{ 
    title: "ParentCategory", 
    sort: 1, 
    children: [ 
     { 
      title: "ChildA", 
      sort: 1, 
     }, 
     { 
      title: "ChildB", 
      sort: 2 
     } 
    ] 
} 

而下面的查询:

db.Categories.find({}, 
    { 
     sort: { sort: 1 } 
    } 
); 

我想通过父类别排序第一...这是没有问题的。但我也希望孩子类别服从排序顺序。

我已经阅读了一些建议,让他们在我想要的数组中排序,而不是使用排序字段,也阅读了关于聚合的内容,但看起来很复杂。也许我应该对数据进行不同的建模。出于某些原因,我想稍后可以轻松地更改特定类别或子类别的排序。

尝试使用:

sort: { "sort" : 1, "children.sort" : 1 } 

这没有奏效。

对不起,这个新手问题。 Mongo新手...真的很新。

+0

如果您需要通常以> 1的方式对子文档进行排序,那么将它们按照排序顺序存储在父文档的数组中可能不是最好的设计。如果没有关于用例的概念,很难说好的设计是什么,但是在[MongoDB数据建模文档]中描述了一系列用于建模父 - 子关系的选项(http://docs.mongodb.org/manual /应用程序/数据模型/)。 – wdberkeley 2014-10-02 16:34:40

回答

0

将数组排序在集合中而不是在每个查询上排序它们可能更有效。做阵列上的排序插入文档之前,每一次你推一个元素到数组的时间使蒙戈数组为你重新排序,这样,

db.cateegories.update(
{...}, // query 
{ 
    "$push": { 
    "children": { 
     "$each": [ { 
       "title" : "ChildC", 
       "sort" : 3 
       }, ... 
       ], 
     "$sort": {"sort" : 1} 
    } 
    } 
} 
) 

查看更多资讯here