如何解决Mongodb-合并子文档中的数组,然后排序
我有一个名为“作者”的文档,其中包含一个名称和一系列书籍。
我想将所有“ books”字段(是子文档的数组)连接到一个数组中。然后,我需要根据“页面”字段过滤掉一些子文档(我已经完成了)。
然后我要根据子文档中的“ released”字段对该数组进行排序。
这是我的文件
{
"_id": ObjectId(5f67b448c869aa0de8cdb449),"name":"Author 1","books":[
{
"_id": ObjectId(5f67b448c869aa0de8cdb44a),"title": "Book 1","pages": 59,"released": "2019-09-21T19:58:00.795+00:00"
},{
"_id": ObjectId(5f67b448c869aa0de8cdb44b),"title": "Book 2","pages": 21,"released": "2019-03-05T20:58:00.798+00:00"
}
]
}
{
"_id": ObjectId(5f67b448c869aa0de8cdb44c),"name":"Author 2","books":[
{
"_id": ("5f67b448c869aa0de8cdb44d),"title": "Book 3","pages": 75,"released": "2020-03-04T20:58:00.802+00:00"
},{
"_id": ObjectId(5f67b448c869aa0de8cdb44e),"title": "Book 4","pages": 49,"released": "2019-08-17T19:58:00.802+00:00"
}
]
}
我尝试使用这种汇总方式,这使我可以筛选出少于21页的图书。
[
{
$project: {
books: {
$filter: {
input: '$books',as: 'book',cond: {
$gt: ['$$book.pages',21]
}
}
}
}
}
]
这是我的结果。
[
{
_id: 5f67b448c869aa0de8cdb449,books: [
{
"_id": ObjectId(5f67b448c869aa0de8cdb44a),"released": "2019-09-21T19:58:00.795+00:00"
}
]
},{
_id: 5f67b448c869aa0de8cdb44c,books: [
{
"_id": ("5f67b448c869aa0de8cdb44d),"released": "2020-03-04T20:58:00.802+00:00"
},{
"_id": ObjectId(5f67b448c869aa0de8cdb44e),"released": "2019-08-17T19:58:00.802+00:00"
}
]
}
]
我正在寻找这样的格式的结果。 (所有通过过滤器的书籍的数组,也将对其进行排序。)
books: [
{
"_id": ObjectId(5f67b448c869aa0de8cdb44e),"released": "2019-08-17T19:58:00.802+00:00"
},{
"_id": ObjectId(5f67b448c869aa0de8cdb44a),"released": "2019-09-21T19:58:00.795+00:00"
},{
"_id": ("5f67b448c869aa0de8cdb44d),"released": "2020-03-04T20:58:00.802+00:00"
}
]
解决方法
您可以使用exceptionHandler()
来平整数组,然后执行$unwind
以获取与您的条件匹配的对象。然后使用$match
根据发布日期进行排序,并使用$sort
$group
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。