MongoDB 怎么根据内嵌中的字段排序

集合数据为嵌套列表结构,根据嵌套文档中符合条件的子文档中的字段实现排序。如有集合 demo,其数据如下:

{
"_id" : ObjectId("59fb2e93670c90000ab85efb"),
    "relateId" : NumberLong(124),
    "list" : [ 
        {
            "relateId" : NumberLong(206),
            "position" : 10
        }, 
        {
            "relateId" : NumberLong(208),
            "position" : 4
        }
    ],
    "createAt" : NumberLong(1489258188083),
    "updateAt" : NumberLong(1505796172787)
  }

 {
"_id" : ObjectId("59fb2e93670c90000ab86efb"),
    "relateId" : NumberLong(125),
    "list" : [ 
        {
            "relateId" : NumberLong(208),
            "position" : 5
        }
    ],
    "createAt" : NumberLong(1489258188083),
    "updateAt" : NumberLong(1505796172787)
}
 
 
......

希望根据 list.relateId=208 的 list 对象里面的 position 字段排序。
使用集算器, 根据 list 中筛选记录的 postion 排序即可,实现比较容易

1、编写脚本 demo.dfx


A B
1 =mongo_open("mongodb://localhost:27017/raqdb") / 连接 MongoDB 数据库
2 =mongo_shell(A1,"demo.find({\"list.relateId\":{$in:[208]}},   {_id:0})").fetch() / 获取 demo 数据
3 =A2.sort(-~.list.select@1(relateId==208).position ) / 根据筛选记录的 postion 排序
4 >A1.close() / 关闭连接
  2、调试执行一下,可看到格值 A2 为:
A2 relateId list createAt updateAt

124 [[206,10.0],[208,4.0]] 1489258188083 1505796172787
125 [[208,5.0]] 1489258188083 1505796172787
100 [[203,20.0],[208,6.0]] 1489258188000 1505796172777
123 [[208,9.0]] 1489258188883 1505796172888
3、执行脚本后,格值 A3 为:
A3 relateId list createAt updateAt

123 [[208,9.0]] 1489258188883 1505796172888
100 [[203,20.0],[208,6.0]] 1489258188000 1505796172777
125 [[208,5.0]] 1489258188083 1505796172787
124 [[206,10.0],[208,4.0]] 1489258188083 1505796172787