在 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 指定多个连接条件
如何在 Node.js 中高效/快速地执行数组连接,类似于 MongoDB $lookup?