使用MongoDB,我可以对父文档进行排序,然后对子数组进行排序吗?

时间:2014-10-01 20:49:35

标签: 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的新手...就像真的很新。

1 个答案:

答案 0 :(得分:0)

保持数组在集合中排序而不是在每个查询上对它们进行排序可能更有效。在插入文档之前对数组进行排序,每次将元素推入数组时,让mongo为您重新排序数组,如下所示,

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

查看更多信息here