在 MongoDB 的 $lookup 函数中使用字段值

Posted

技术标签:

【中文标题】在 MongoDB 的 $lookup 函数中使用字段值【英文标题】:Use Field values in $lookup function in MongoDB 【发布时间】:2020-05-26 15:26:51 【问题描述】:

现在我面临一个问题,我想根据变量加入 Mongo 中的集合,因为数据存储在不同的集合中。

我的数据集看起来像


    _id:5e424331134cea013014ea9e0,
    process:"Process1",
    event:"Event1",
    collection:"Collection1",
    Date:"2020-02-11",
,

    _id:5e424135151cea32114ea9e0,
    process:"Process2",
    event:"Event2",
    collection:"Collection2",
    Date:"2020-02-11",

我需要数据的集合保存在字段 $collection 的值中。

集合看起来像这样:

收藏1:


    _id:5e63636636cea32114ea9e0,
    item:81740147,
    value:2,
    Date:"2020-02-11",

集合2:


    _id:5e63636636cea32114ea9e0,
    user:testuser,
    age:3,
    Date:"2020-02-11",

我想在聚合管道中实现的是根据集合名称加入我的文档。

我已经尝试过的:


    $lookup: 
        from: '$collection',
        localField: 'Date',
        foreignField: 'Date',
        as: 'join'
    

这对我不起作用。 也许你有不同的想法。

请记住,我只能使用聚合框架来解决问题,而不是mongodb的cli。

【问题讨论】:

您找到解决方案了吗?我也面临同样的困境 【参考方案1】:

改成这样的


    $lookup: 
        from: 'collectionname', // the name you specified when creating your model
        localField: 'Date',
        foreignField: 'Date',
        as: 'join'
    

它必须与您创建模型时使用的相同,否则将无法正常工作

如果您的集合名称是动态的,

你总是可以在那里使用变量,

就像你可以做这样的事情

var coll_name = 'collectionname';


    $lookup: 
        from: coll_name,
        localField: 'Date',
        foreignField: 'Date',
        as: 'join'
    

现在,您可以将这个动态集合名称从任何地方传递给您的函数/api

【讨论】:

我实际上想避免像 from: 'Collection 1' 这样输入集合本身,因为我的数据集中的集合名称会不时更新,这意味着每次更新时我也必须更新我的聚合。 查看这个更新的答案,你可以在集合 nam 中传递动态变量,它完全像这样工作

以上是关于在 MongoDB 的 $lookup 函数中使用字段值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mongodb 中使用 $lookup 加入多个集合

在 mongodb 中使用 $lookup 指定多个连接条件

如何在 mongodb 中应用 $lookup 条件?

如何在 Node.js 中高效/快速地执行数组连接,类似于 MongoDB $lookup?

使用 $lookup 和 let 和管道在 MongoDB 中声明变量

使用聚合 $lookup 加入 mongodb