如何以自定义顺序对Mongo中的数据进行排序

安德烈·纳多莎(Andrey Nadosha)

我如何使用Mongo功能对这些数据进行排序:

输入

{ "_id" : 1, "domainName" : "test1.com", "hosting" : "hostgator.com" }
{ "_id" : 2, "domainName" : "test2.com", "hosting" : "aws.amazon.com"}
{ "_id" : 3, "domainName" : "test3.com", "hosting" : "aws.amazon.com" }
{ "_id" : 4, "domainName" : "test4.com", "hosting" : "hostgator.com" }
{ "_id" : 5, "domainName" : "test5.com", "hosting" : "aws.amazon.com" }
{ "_id" : 6, "domainName" : "test6.com", "hosting" : "cloud.google.com" }
{ "_id" : 7, "domainName" : "test7.com", "hosting" : "aws.amazon.com" }
{ "_id" : 8, "domainName" : "test8.com", "hosting" : "hostgator.com" }
{ "_id" : 9, "domainName" : "test9.com", "hosting" : "cloud.google.com" }
{ "_id" : 10, "domainName" : "test10.com", "hosting" : "godaddy.com" }

为了按托管字段排序,要获得结果,例如按以下顺序:

1)首先-所有哥达;

2)其次-所有AWS

3)接下来,其他所有内容。

输出

{
    "result" : [
            {

                    "_id" : 10, 
                    "domainName" : "test10.com",
                    "hosting" : "godaddy.com"
            },
            {
                    "_id" : 2, 
                    "domainName" : "test2.com",
                    "hosting" : "aws.amazon.com"
            },
            {
                    "_id" : 3, 
                    "domainName" : "test3.com",
                    "hosting" : "aws.amazon.com"
            },
            {
                    "_id" : 5, 
                    "domainName" : "test5.com",
                    "hosting" : "aws.amazon.com"
            },
            {
                    "_id" : 7, 
                    "domainName" : "test7.com",
                    "hosting" : "aws.amazon.com"
            },
            {
                    "_id" : 1, 
                    "domainName" : "test1.com",
                    "hosting" : "hostgator.com"
            },
            {
                    "_id" : 4, 
                    "domainName" : "test4.com",
                    "hosting" : "hostgator.com"
            },
            {
                    "_id" : 6, 
                    "domainName" : "test6.com",
                    "hosting" : "cloud.google.com"
            },
            {
                    "_id" : 8, 
                    "domainName" : "test8.com",
                    "hosting" : "hostgator.com"
            },
            {
                    "_id" : 9, 
                    "domainName" : "test9.com",
                    "hosting" : "cloud.google.com"
            },
    ]
    }

在此示例中,我想以更相关的方式为用户返回结果。在origanl任务中,我想使用其他几个收集的其他信息进行排序,这些收集可以提供其他信息。

但是,如果您可以帮助我完成上一个任务,那就足够了吗?

UPD:关于问题的第二部分。

另一个任务是如何根据另一个集合从一个集合返回可排序的数据。

例子:

第一个集合与之前给出的相同:

 { "_id" : 1, "domainName" : "test1.com", "hosting" : "hostgator.com" }
 ...

第二个集合,提供有关托管的其他信息:

{ '_id': 123, 'quality':'best', 'hostings': ["hostgator.com",  "aws.amazon.com"]},
{ '_id': 321, 'quality':'good', 'hostings': ["cloud.google.com"]},
{ '_id': 345, 'quality':'bad', 'hostings': ["godaddy.com"]},

结果,我需要按以下顺序从第一个集合数据中返回:

1)首先,所有主机都不错2)其次,所有主机都不错3)第三,所有主机都不好

输出:

{
"result" : [
        //Best:
        {
                "_id" : 1, 
                "domainName" : "test1.com",
                "hosting" : "hostgator.com"
        },
        {
                "_id" : 4, 
                "domainName" : "test4.com",
                "hosting" : "hostgator.com"
        },
        {
                "_id" : 8, 
                "domainName" : "test8.com",
                "hosting" : "hostgator.com"
        },
        {
                "_id" : 2, 
                "domainName" : "test2.com",
                "hosting" : "aws.amazon.com"
        },
        {
                "_id" : 3, 
                "domainName" : "test3.com",
                "hosting" : "aws.amazon.com"
        },
        {
                "_id" : 5, 
                "domainName" : "test5.com",
                "hosting" : "aws.amazon.com"
        },
        {
                "_id" : 7, 
                "domainName" : "test7.com",
                "hosting" : "aws.amazon.com"
        },

       // Good:
        {
                "_id" : 9, 
                "domainName" : "test9.com",
                "hosting" : "cloud.google.com"
        },
        {
                "_id" : 6, 
                "domainName" : "test6.com",
                "hosting" : "cloud.google.com"
        },

       //Bad
        {
                "_id" : 10, 
                "domainName" : "test10.com",
                "hosting" : "godaddy.com"
        }
]
}

更新2

我在前面的示例中得到了很好的答案和示例。非常感谢!但是我举了另一个例子。

我需要比较3个集合的ID进行排序-第一个:朋友,第二个:“请求”,以及:其他用户。

输入

db.friends.find({userId: currentUser});
    // {"_id" : "PgC7LrtaZtQsShtzT", "userId" : "tHuxnWxFLHvcpRgHb", "friendId" : "jZagPF7bd4aW8agXb",}
db.requests.find({userId: currentUser});
   // looks like friend but with 'requesterId'

现在,我需要汇总“用户”集合,定义与前两个集合(朋友,请求)相匹配的分数。

使用提供的答案,我管理结果,但仅收集了一个。如何用3个或多个做这个?

海德斯

您可以将每个hostingin投影到由整数表示的单独类型中,最后对这些整数进行排序。在下面的聚合管道中进行了说明

[
{$lookup: {
    from: 'secondCollectionStoringQuality',
    localField: 'hosting',
    foreignField: 'hostings',
    as: 'nw'
    }},
{$unwind: '$nw'},
{$project: {
        domainName: 1,
        hosting: 1,
        type: {
            $cond: [
                {$eq: ['$nw.quality', 'best']},
                0,
                {$cond: [
                    {$eq: ['$nw.quality', 'good']},
                    1,
                    2
                    ]}
            ]
        }
    }},
    {$sort: {type: 1}}
]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何以自定义顺序对给定的字符串列表进行排序?

如何对自定义类中的数据进行排序

使用Google脚本对Google表格中的数据进行排序(具有自定义排序顺序)

如何以自定义方式对多维数组进行排序

如何使用自定义排序顺序在angular js中对对象进行排序?

如何根据字符串索引上的自定义顺序对熊猫数据框进行排序

如何按自定义顺序对值进行排序

ng-repeat中的自定义顺序仅对特定数据进行排序

在Eloquent中按自定义顺序对集合进行排序

以自定义顺序对 Arraylist 进行排序

如何在Java数组中按字母顺序对自定义对象进行排序?

如何在Spring Boot中对mongo db存储库进行自定义排序查询?

如何使用自定义模型类按节按字母顺序对tableView中的数据排序?

Python中的自定义排序顺序

CTE 中的自定义排序顺序

如何以自定义顺序回显从mysql数据库中提取的数组数据?

如何根据自定义算法对工作表中的数据列表进行排序?

如何在MySQL中通过自定义算法对数据进行排序?

如何编写自定义函数来在 python 中对数据框进行排序和透视

如何在SQL Server 2012中自定义对这些数据进行排序?

如何使用Swift Codable根据特定的排序顺序对自定义对象进行排序

使用自定义排序顺序在Unix中对字母数字字符串进行排序

ElasticSearch-定义自定义字母顺序进行排序

如何在Power BI中按自定义日期层次结构按时间顺序对图表进行排序

如何以自定义格式而不是字母数字顺序排列SQL数据

按自定义列表顺序对数据表进行排序

按指定自定义顺序的列对熊猫数据框进行排序

如何以自定义顺序运行迁移

Java:按自定义顺序对Collection <Class>进行排序