Arrays 如何通过减去内部数组的长度对MongoDB中的文档进行排序?
我正在从我的mongoDB数据库中检索数据,我希望能够通过减去内部数组的长度对文档进行排序。 我的数据结构如下所示:Arrays 如何通过减去内部数组的长度对MongoDB中的文档进行排序?,arrays,mongodb,sorting,Arrays,Mongodb,Sorting,我正在从我的mongoDB数据库中检索数据,我希望能够通过减去内部数组的长度对文档进行排序。 我的数据结构如下所示: [ { _id: "6bcdf5b7-0757-4195-a0b6-d7ec3d59d194", status: { plus: ['1', '2'], minus: ['1'] }, { _id: "6fb2ea76-8f12-4200-98fa-72201ba5f8c1", status: { plus:
[
{
_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']
},
...
]
我要找的是一个文档数组,它是按长度减去加和减数组排序的
结果,我正在寻找:
[
{
_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 }
}
])
问题是:它失去了所有其他属性,包括状态对象、我无法使用其他用户查找查询、我无法跳过和限制分页 我不是傻瓜。投票重新开放。大多数链接答案都是使用stoneage的MongoDB和过时的方法。@DanFromGermany没有代码的问题,指出了他们需要做的两件事的用法示例。让提出问题的人读一些东西并学习如何。如果这个问题显示有人试图回答,那么也许一个更正它的答案就可以了。@NeilLunn我可以向您展示大量的代码,这些代码根本不起作用,或者根本不起作用。我已经找了好几天熟悉的问题,但它似乎不是一个流行的问题。你的相关问题都不接近我的主题,所以我不理解你的仇恨。谢谢。@VadimTorosyan请务必显示您的代码尝试。但我也建议您实际查看前面提到的示例并阅读它们,因为$size
返回数组长度(相同的旧答案适用),而$sort
是用于对预测值进行“排序”的阶段(相同的旧答案适用)。“减法”通常由一个名为$subtract
的操作符完成。如果您在查看这些示例后仍然无法解决问题,请在问题中包含您尝试过的代码。但一定要尝试使用前面提到的运算符和它们的用法示例。@NeilLunn代码补充道。我类似于那个参数,我可以找到并按减法排序,但我失去了所有其他属性,并且能够对结果进行分页。不是重复。投票重新打开。大多数链接答案都是使用stoneage的MongoDB和过时的方法。@DanFromGermany没有代码的问题,指出了他们需要做的两件事的用法示例。让提出问题的人读一些东西并学习如何。如果这个问题显示有人试图回答,那么也许一个更正它的答案就可以了。@NeilLunn我可以向您展示大量的代码,这些代码根本不起作用,或者根本不起作用。我已经找了好几天熟悉的问题,但它似乎不是一个流行的问题。你的相关问题都不接近我的主题,所以我不理解你的仇恨。谢谢。@VadimTorosyan请务必显示您的代码尝试。但我也建议您实际查看前面提到的示例并阅读它们,因为$size
返回数组长度(相同的旧答案适用),而$sort
是用于对预测值进行“排序”的阶段(相同的旧答案适用)。“减法”通常由一个名为$subtract
的操作符完成。如果您在查看这些示例后仍然无法解决问题,请在问题中包含您尝试过的代码。但一定要尝试使用前面提到的运算符和它们的用法示例。@NeilLunn代码补充道。我和那个参数很相似,我能够找到并按减法排序,但我失去了所有其他属性,并且能够对结果进行分页。