当前位置: 首页 > 知识库问答 >
问题:

在$lookup mongo聚合管道中使用对象路径

乐健
2023-03-14

在今天的任务中,我尝试在一个集合中聚合文档(我们称之为集合1),在管道的一个阶段中,我尝试使用$lookup从另一个集合中检索文档(我们称之为集合2)。

收集1对象模型:

{
    "field1": "value1",
    "field2": "value2"
    "field3": "value3"
}

收集2对象模型:

{
    "field1: "value1",
    "field2"; "value2",
    "field3: {
        "field31": "value31",
        "field32": "value32"
    }
}

我正试图做的是从集合2的where字段3中检索文档。字段31等于集合1的值。

我的$查找阶段看起来像这样,但目前似乎不起作用。我没有发现任何线索,如果这应该工作,但期待着你的答复。


{
    $lookup: {
        from: "collection2",
        let: {
            "c": "$field1",
            "l": "$field2",
            "t": "$field3",
        },
        pipeline: [
            {
                $match: {
                    $expr: {
                        $and: [
                            { $eq: ["$field1", "$$c"] },
                            { $eq: ["$field2", "$$l"] },
                            { $eq: ["$field3.field31", "$$t"] },
                        ]
                    }
                },
            },
        ],
        as: "awesomejoin"
    }
}

我希望避免拥有一个项目或一个组,然后再次展开和过滤。我的愿望是直接从比赛阶段获得记录,认为这在表现方面更好。。。

让我知道你对此的想法。

非常感谢。

共有1个答案

勾长卿
2023-03-14

请试试这个:

db.Collection1.aggregate([
   {
     $lookup:
       {
         from: "Collection2",
         localField: "field1",
         foreignField: "field3.field31",
         as: "docs"
       }
  }
])

简单的查找应该很简单,但不能确切地确定为什么要创建局部变量并在相同的变量上查找相等的值,还可以在数组上使用,在可以使用访问内部元素的对象上使用 符号与编程语言中的like相同。

参考:$查找

 类似资料:
  • 我搜索了类似的问题,但没有找到任何问题。请随时为我指出他们的方向。 假设我有这个数据: 如果我想获取每个属性组的最新记录,我可以这样做: 我想让我的数据按属性分组,然后按id排序,这样每个组中只保留最新的记录,这就是我可以做到的。但我需要一种方法来避免在结果中命名我想要的所有字段(在本例中为“name”),因为在我的实际用例中,它们在前面是未知的。 那么,有没有办法做到这一点,但不必使用$last

  • 我想知道如何在Elasticsearch中使用聚合时获得具有最高doc_count的存储桶。我正在使用Kibana示例数据kibana_sample_data_flights: 如果有一个存储桶具有最大文档计数,我可以将术语聚合的大小设置为1,但是如果有两个存储桶具有相同的最大文档计数,则这不起作用。 自从我涉足管道聚合以来,我觉得应该有一种简单的方法来实现这一点。最大桶聚合似乎能够处理多个最大桶

  • 我目前正在我的一个Java脚本中开发mongoDB聚合管道。 输入数据可以简化为不同客户的订单列表。例如: _id、customerId和orderId是字符串,金额是一个Long类型的数字,装运是名为shipping的自定义类的实体。现在,我想汇总这些数据,并显示每个customerId的总花费和所有发货量。对于第一位客户: {CusterId:123,发货:[发货1,发货2,发货4],金额:5

  • Azure Cosmos DB现在也支持聚合管道,这真的很好,这使它成为我们使用的一个可行替代品,而不是运行我们自己的Mongo DB容器,但我没有找到通过代码启用这些功能的方法(如何在门户中进行描述:https://azure.microsoft.com/en-gb/blog/azure-cosmosdb-extends-support-for-mongodb-aggregation-pipel

  • 我们在Java中有任何聚合器函数来执行下面的聚合吗?

  • 我在尝试使用MongooseJs在Mongodb中按嵌套数组排序时遇到了一个小问题。 a)一个产品包含任务,每个任务都有子任务。 b)任务有顺序 这是一个示例产品文档: 结果: } 我正在使用MongoDB聚合管道来订购任务 结果: } 预期结果: 我真的很接近了,所有的排序似乎都在工作。我只需要一些帮助来将子任务放回父母体内。非常感谢任何帮助。 谢谢