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() | / 关闭连接 |
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 |
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 |
英文版