Flink CDC中读取mongodb cdc,所有配置依赖等信息都正确,任务不报错但是读不到数据-[阿里云_云淘科技]

经测试,相同连接配置和依赖的情况下,读取mongodb同一库下面不同集合,集合命名是’abc’,’abc_def’这种的读取没有问题。但是集合命名是以点分隔的 如:’abc.def.gh’,数据无法读取,这种特殊命名集合应该如何处理才能读到数据~

以下为热心网友提供的参考意见

问题已解决,需要在with语句指定collection时使用(数据库名称.集合名称)的方式强指定;假设我的库名是test,那么with语句中可以这样写:
‘database’ = ‘test’,
‘collection’ = ‘test.abc.def.gh’,

以下为热心网友提供的参考意见

对于以点分隔的集合名,MongoDB 默认不支持直接读取。但是,你可以通过以下方法来处理这种情况:

  1. 使用 $regex 操作符进行正则匹配,将点分隔的集合名转换为下划线分隔的集合名。例如,将 ‘abc.def.gh’ 转换为 ‘abc_def_gh’。

  2. 在查询时,使用 $regex 操作符匹配转换后的集合名。例如,查询 ‘abc_def_gh’ 集合中的数据。

以下是一个示例代码:

// 假设你的数据库连接对象为 db
const collectionName = 'abc.def.gh';

// 将点分隔的集合名转换为下划线分隔的集合名
const convertedCollectionName = collectionName.replace(/\./g, '_');

// 查询转换后的集合名中的数据
db.getCollection(convertedCollectionName).find().toArray((err, result) => {
  if (err) {
    console.error(err);
  } else {
    console.log(result);
  }
});

这样,你就可以读取到以点分隔的集合名中的数据了。

以下为热心网友提供的参考意见

在MongoDB中,点(.)在集合名称中有特殊的意义。它通常用于分隔命名空间,例如在存储用户定义的函数或存储过程时。因此,当您尝试使用包含点的集合名称(如’abc.def.gh’)进行查询时,MongoDB可能会将其解释为命名空间,而不是您预期的集合名称。
要解决这个问题,您可以使用以下方法之一:
1.更改集合名称:

  • 考虑将包含点的集合名称更改为不包含点的名称,例如将’abc.def.gh’更改为’abc_def_gh’。

2.使用引号:

  • 当您在查询中使用此类集合名称时,可以尝试使用引号将其括起来。例如:
    javascript`db.abc.def.gh.find({})`
    
  • 这告诉MongoDB将’abc.def.gh’视为一个单一的集合名称,而不是尝试将其解释为命名空间。

3.检查连接字符串或驱动程序设置:

  • 确保您的连接字符串或驱动程序设置正确,并且没有其他配置阻止您访问包含点的集合。

4.检查权限和访问控制:

  • 确保您具有读取该集合的适当权限,并且没有访问控制限制阻止了您的查询。

5.查看文档和社区资源:

  • 检查MongoDB的官方文档,以获取有关特殊字符和命名约定在集合名称中的使用和限制的更多信息。此外,还可以查看相关的社区和论坛,以获取其他用户可能遇到的类似问题和解决方案。

本文来自投稿,不代表新手站长_郑州云淘科技有限公司立场,如若转载,请注明出处:https://www.cnzhanzhang.com/22151.html

(0)
匿名
上一篇 2024年1月9日 上午7:34
下一篇 2024年1月9日

相关推荐

新手站长从“心”出发,感谢16年您始终不离不弃。