【问题标题】:How to get Aggregated Results in Loopback querying Mongo如何在环回查询 Mongo 中获取聚合结果
【发布时间】:2015-10-11 05:03:30
【问题描述】:

我是环回新手,需要解决以下问题。我需要两个字段(电子邮件和名称)的 mongo 不同的结果。

数据:

var a = [ {电子邮件:'x@gmail.com',名称:'x'},{电子邮件: 'x@gmail.com',名称:'x'},{ 电子邮件:'x@gmail.com',名称:'z'}]

输出:

var a = [ 
{ email: 'x@gmail.com',name: 'x'},
{ email: 'x@gmail.com',name: 'z'}
]

如何在环回中使用以下聚合函数来获得所需的输出结果。

collection = db.tb;
result = collection.aggregate( 
            [
                {"$group": { "_id": { email: "$email", name: "$name" } } }
            ]
        );

(来源How to efficiently perform "distinct" with multiple keys?

【问题讨论】:

    标签: node.js mongodb loopbackjs


    【解决方案1】:

    使用额外的$group$project 阶段来投射所需的输出,

    • Group by emailname,获取每个唯一记录的单个记录 组合。
    • 再次将group 汇总所有记录并累积_id 使用$push 运算符在上一阶段获得。
    • Project records 字段并排除 _id 字段。

    代码:

     result = collection.aggregate( 
            [
                {$group:{"_id":{"email": "$email","name": "$name" }}},
                {$group:{"_id":null,"records":{$push:"$_id"}}},
                {$project:{"_id":0,"records":1}},
            ]
        );
    

    o/p:

    {
            "records" : [
                    {
                            "email" : "x@gmail.com",
                            "name" : "z"
                    },
                    {
                            "email" : "x@gmail.com",
                            "name" : "x"
                    }
            ]
    }
    

    【讨论】:

    • “我怎么能使用下面的代码......”你在这里发布的这个“环回代码”也是如此。它看起来不像。我认为社区中的大多数人更喜欢回答他们问题的“专家”,而不是他们提出的问题的某些知识的“专家”。
    • 完全是 Neil。我需要 Loopback 代码来实现这个。
    • @Vaibhav- 我只是想给出如何完成它的想法。只是认为帖子所有者可以使用它来了解需要如何完成。您始终可以将此答案保留为不接受,并可以等待专家回答或尝试转换 loopback 的语法。我可以建议你一个起点 - docs.strongloop.com/display/public/LB/…, github.com/strongloop/loopback/issues/890
    【解决方案2】:

    这个答案有点晚了,但我希望它可能对其他偶然发现这个问题的人有价值。要在环回中访问 mongo 聚合功能,您必须绕过抽象,因此您的代码不再与数据库无关,请记住这一点,就好像您曾经切换数据库一样,您将不得不更改此代码。在环回中,您将编写以下代码:

    var connector = app.dataSources.yourMongoConnector.connector
    
    result = connector.collection("yourCollection").aggregate([
                {"$group": { "_id": { email: "$email", name: "$name" } } }
            ])
    

    您可以使用此方法访问环回中不存在的任何数据库操作。我还没有测试过聚合方法,但是已经成功地将它与 findAndModify() 和 distinct() 一起使用 - 所以毫无疑问它可以与聚合或 mongoDb 文档中的任何其他内容一起使用。

    【讨论】:

    • 这里唯一的问题是,结果将是一个“对象”,而不是您正在寻找的持久对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多