mongodb - 如何按“连接”字段排序?
问题描述
我不知道如何表达它,但我想对以下数据进行排序,以使子消息直接位于其父母之下。
{ "_id" : "oI", "msg" : "Hello", "ts" : ISODate("2019-09-20T01:01:43.749Z") },
{ "_id" : "z", "msg" : "can you hear me?", "ts" : ISODate("2019-09-20T01:01:46.569Z"), "tcount" : 3 },
{ "_id" : "wG", "msg" : "Undsen bichver 2", "ts" : ISODate("2019-09-20T02:00:58.254Z") },
{ "_id" : "BF", "msg" : "Undsen bichver 3", "ts" : ISODate("2019-09-20T02:01:06.784Z") },
{ "_id" : "Jq", "msg" : "Undsen bichver 4", "ts" : ISODate("2019-09-20T02:01:11.785Z") },
{ "_id" : "oP", "parentId" : "z", "msg" : "Test 1", "ts" : ISODate("2019-09-20T01:02:06.860Z") },
{ "_id" : "Mq", "parentId" : "z", "msg" : "Test 2", "ts" : ISODate("2019-09-20T01:05:37.173Z") },
{ "_id" : "Lq", "parentId" : "z", "msg" : "Test 3", "ts" : ISODate("2019-09-20T02:01:24.370Z") }
我用来显示上述结果的排序是这样的:
.sort({ "parentId": 1, "ts": 1 })
我想要的结果是这样的:
{ "_id" : "oI", "msg" : "Hello", "ts" : ISODate("2019-09-20T01:01:43.749Z") },
{ "_id" : "z", "msg" : "can you hear me?", "ts" : ISODate("2019-09-20T01:01:46.569Z"), "tcount" : 3 },
{ "_id" : "oP", "parentId" : "z", "msg" : "Test 1", "ts" : ISODate("2019-09-20T01:02:06.860Z") },
{ "_id" : "Mq", "parentId" : "z", "msg" : "Test 2", "ts" : ISODate("2019-09-20T01:05:37.173Z") },
{ "_id" : "Lq", "parentId" : "z", "msg" : "Test 3", "ts" : ISODate("2019-09-20T02:01:24.370Z") },
{ "_id" : "wG", "msg" : "Undsen bichver 2", "ts" : ISODate("2019-09-20T02:00:58.254Z") },
{ "_id" : "BF", "msg" : "Undsen bichver 3", "ts" : ISODate("2019-09-20T02:01:06.784Z") },
{ "_id" : "Jq", "msg" : "Undsen bichver 4", "ts" : ISODate("2019-09-20T02:01:11.785Z") }
请注意,记录"parentId" : "z"
在其父项 ( "_id" : "z"
)的正下方
有可能做这样的事情吗?
解决方案
使用$addFields和$ifNull创建新字段,然后您可以按以下方式排序:
db.collection.aggregate([
{
$addFields: {
sortBy: { $ifNull: [ "$parentId", "$_id" ] }
}
},
{
$sort: {
sortBy: -1, parentId: 1
}
}
])
推荐阅读
- javascript - 如何确保我使用最新的 Promise()
- asp.net-mvc - 传递(局部变量)列表
并在视图 MVC 中显示列表 - c - Scanf 和动态内存分配
- django - Django FormView:form_valid() 接受 2 个位置参数,但给出了 3 个
- python - 当文件包含来自不同目录的模块时,如何运行 python 脚本?
- ruby-on-rails - 将 ruby 全局版本更改为 2.6.4 后无法运行 rails
- python - Python - 如何在不使用第三方库的情况下读取图像像素?
- javascript - 我可以通过下一次调用将值传递给委托生成器吗?
- python-3.x - 将循环结果保存到变量中?
- php - 如何解决 Laravel “有效载荷无效”?