经测试,相同连接配置和依赖的情况下,读取mongodb同一库下面不同集合,集合命名是'abc','abc_def'这种的读取没有问题。但是集合命名是以点分隔的 如:'abc.def.gh',数据无法读取,这种特殊命名集合应该如何处理才能读到数据~
问题已解决,需要在with语句指定collection时使用(数据库名称.集合名称)的方式强指定;假设我的库名是test,那么with语句中可以这样写:
'database' = 'test',
'collection' = 'test.abc.def.gh',
对于以点分隔的集合名,MongoDB 默认不支持直接读取。但是,你可以通过以下方法来处理这种情况:
使用 $regex
操作符进行正则匹配,将点分隔的集合名转换为下划线分隔的集合名。例如,将 'abc.def.gh' 转换为 'abc_def_gh'。
在查询时,使用 $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.更改集合名称:
2.使用引号:
javascript`db.abc.def.gh.find({})`
3.检查连接字符串或驱动程序设置:
4.检查权限和访问控制:
5.查看文档和社区资源:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。