使用MongoDB,我可以先在父文档上排序,然后在子数组上排序吗?

使用MongoDB,我可以先在父文档上排序,然后在子数组上排序吗?,mongodb,Mongodb,我正在阅读一篇关于聚合的文章,以寻求解决我的问题,但我不确定它是否最适合我的情况,或者我可能需要重新建模如何存储数据 考虑以下文件: { title: "ParentCategory", sort: 1, children: [ { title: "ChildA", sort: 1, }, { title: "ChildB", s

我正在阅读一篇关于聚合的文章,以寻求解决我的问题,但我不确定它是否最适合我的情况,或者我可能需要重新建模如何存储数据

考虑以下文件:

{
    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的新成员。。。真的很新

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

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

请参阅更多信息。

如果您通常需要以>1的方式对子文档进行排序,那么将它们以一种排序顺序存储在父文档的数组中可能不是最佳设计。如果没有用例的概念,很难说什么是好的设计,但是本文描述了一系列用于建模父子关系的选项。