我正在从mongoDB数据库中检索数据,并且希望能够通过减去内部数组的长度来对文档进行排序。 我的数据结构如下:
[
{
_id: "6bcdf5b7-0757-4195-a0b6-d7ec3d59d194",
status: {
plus: ['1', '2'],
minus: ['1']
},
{
_id: "6fb2ea76-8f12-4200-98fa-72201ba5f8c1",
status: {
plus: ['1', '2', '3', '4'],
minus: []
},
{
_id:"b1ecf353-acea-4808-a847-27b765c52230"
status: {
plus: ['1', '2', '3'],
minus: ['1', '2', '3']
},
...
]
我正在寻找的-文档数组按长度plus
和minus
数组的长度减去。
结果,我正在寻找:
[
{
_id: "6fb2ea76-8f12-4200-98fa-72201ba5f8c1",
status: {
plus: ['1', '2', '3', '4'],
minus: [] // subtract - 4
},
{
_id: "6bcdf5b7-0757-4195-a0b6-d7ec3d59d194",
status: {
plus: ['1', '2'],
minus: ['1'] // subtrack - 1
},
{
_id:"b1ecf353-acea-4808-a847-27b765c52230"
status: {
plus: ['1', '2', '3'],
minus: ['1', '2', '3'] // subtrack - 0
},
...
]
我找到了聚合框架,但是找不到以自己的方式使用它的方法。
当然,文档中有更多的属性,所以我认为分组不是最好的方法。
所以我的最终结果如下:
col.aggregate([
{
$project: {
status_count: {
$subtract: [
{ $size: { $ifNull: ['$status.plus', []] } },
{ $size: { $ifNull: ['$status.minus', []] } }
]
}
}
},
{
$sort: { status_count: -1 }
}
])
问题是:它失去了所有其他属性,包括状态对象,我无法向用户提供其他查找查询,我无法跳过和限制分页。