我想根据数组大小对 Mongodb 数据进行排序

I want to sort the Mongodb data based on Array size

我有学生(字符串)和讲师(字符串列表)。我想根据讲师人数降序获取记录。讲师如下 样本:[a,b,c] -3, [e,f] -2, [g,h,i,j] -4.

我要的是4、3、2的顺序

这是基于现场指导员数组的size.How使用mongoTemplate或自定义mongodb查询或聚合来查询这个??

查询 1

  • 使用教师数组的$size添加一个新字段
  • 按该字段降序排列
  • 取消设置该字段

*sort 不接受表达式,如果不添加新字段,我们无法在 1 个阶段完成。

Test code here

aggregate(
[{"$set":{"nInstructors":{"$size":"$instructor"}}},
 {"$sort":{"nInstructors":-1}},
 {"$unset":["nInstructors"]}])

查询2

  • 与上面相同,但首先检查是否为数组,以避免在字段具有其他类型或缺失时出错。

Test code here

aggregate(
[{"$set":
  {"nInstructors":
   {"$cond":
    [{"$isArray":["$instructor"]}, {"$size":"$instructor"}, 0]}}},
 {"$sort":{"nInstructors":-1}},
 {"$unset":["nInstructors"]}])

我找到了一种从 mongodb 中按数组大小排序的方法。 以上汇总为:

newAggregation(addFields().addField("nInstructors") .withValue(new Document ("$size, "nInstructors")).build(), 排序(DESC,“nInstructors”), 限制(限制计数) );