MongoDB按字段按翻译排序

时间:2018-07-05 13:52:30

标签: mongodb sorting multilingual collation

我正在处理具有以下结构的文档:

{
"_id" : ObjectId("5b28d08cd7a04b02b31d4543"),
"updated_at" : ISODate("2018-06-19T09:44:44.957Z"),
"created_at" : ISODate("2018-06-19T09:44:44.957Z"),
"created_by" : ObjectId("5b051b6ff4f98d1681835615"),
"title" : [ 
    {
        "lang" : "es",
        "name" : "Hola",
        "_id" : ObjectId("5b28d08cd7a04b02b31d4544")
    },
    {
        "lang" : "en",
        "name" : "Hello",
        "_id" : ObjectId("5b28d08cd7a04b02b31d4545")
    }
],
"admins" : [],
"active" : true,
"__v" : 0
}

我想按title属性对文档进行排序,但是您可以看到title不是文本属性,因此我添加了以下索引:

TopicSchema.index(
  { 'title.name': 'text' },
  {
    collation: {
      locale:   'en',
      strength: 1,
     },
     language_override: 'lang',
   }
)

我的问题是,当我查询按title排序的文档时,会以某种奇怪的顺序得到文档。我不知道是否可以指定要在其中排序的“ lang”,还是只选择first(?)元素。

在我看来,这些文档是经过排序的,因为我在所有文档的开头都添加了大写字母(因此我在索引模式中添加了“归类”选项),但是当我仔细检查后发现小写元素是没有真正排序。

如果文档具有3种语言,将如何使用分类,我感到困惑?

0 个答案:

没有答案