把 SQL Server 导入 MongoDB 的 Ruby 脚本

本文介绍如何利用Ruby脚本来实现从SQLServer数据库到MongoDB的高效数据迁移,包括安装必要驱动、配置数据库连接以及实现数据批量导入。

最近想要测试一下 MongoDB 2.4 新增的 Text Search 功能,需要把以前 SQL Server 数据库中的内容导出到 MongoDB 中做测试用。虽然用 Node.js 也可以操作 SQL Server 数据库,但是微软提供的msnodesql 驱动目前(版本0.2.1)只支持 Windows,想想还是改一下以前写的 Ruby 脚本会更快些。假设你已经成功地安装了 Ruby, Rails 以及 SQL Server 和 MongoDB;剩下的主要就是安装 Ruby 需要的 SQL Server 和 MongoDB 驱动了。

# 首先安装 Rails 连接 SQL Server 所需要的驱动
gem update --system
gem install activerecord-sqlserver-adapter
 
#再安装 10gen 提供的 MongoDB 驱动:
gem install mongo
 
# 这一步会自动安装 bson,再安装 bson_ext
gem install bson_ext


实际脚本的代码就比较简单了:

require "rubygems"
require "active_record"
require "mongo"
 
include Mongo
 
# 声明一个 MongoDB client
@client = MongoClient.new('localhost', 27017)
# MongoDB db
@db = @client['your_mongo_dbname']
# MongoDB collection
@coll = @db['your_collection_name']
 
@coll.remove
 
# 连接 SQL Server 数据库的设置
ActiveRecord::Base.establish_connection(
  :adapter => "sqlserver",
  :host => "your_database_ipaddress",
  :database => "your_database_name",
  :username => "your_database_username",
  :password => "your_database_password"
)  
 
class FooBar < ActiveRecord::Base
  # 指定我们实际的表的名字
  self.table_name = "your_table_name"
end
 
# 使用 find_each 遍历我们的大数据量表
FooBar.find_each(:batch_size => 1000) do |foo|
	# 插入到 MongoDB 的 collection 中
  @coll.insert({'col1' => "#{foo.bar1}", "col2" => "#{foo.bar2}", "col3" => "#{foo.bar3}"});
end


参考:

  • http://docs.mongodb.org/ecosystem/drivers/ruby/
  • Ruby Driver Tutorial: http://api.mongodb.org/ruby/current/

鉴于 Ruby 的元编程特性和 MongoDB 的灵活性,是不是可以做一个通用的转换程序?有时间可以试着写一个。

本文地址:http://www.tfan.org/from-sqlserver-to-mongodb-using-ruby-and-rails

<think>好的,用户现在问的是MongoDBSQL文件后缀名。这个问题看起来有点矛盾,因为MongoDB是NoSQL数据库,通常不使用SQL。不过用户可能对数据库文件类型不太熟悉,或者混淆了不同的数据库系统。 首先,我需要确认用户的实际需求。用户可能是在寻找MongoDB的数据导出文件格式,或者他们可能误以为MongoDB使用类似SQL脚本文件。比如,在MySQL中,SQL文件通常以.sql结尾,但MongoDB使用不同的查询语言和存储格式。 接下来,我应该解释MongoDB不使用SQL,所以没有传统的.sql文件。然后,介绍MongoDB相关的文件类型,比如BSON数据文件、JSON导出文件、以及可能的JavaScript脚本文件(如用于迁移的.js文件)。同时,需要说明虽然MongoDB本身不支持SQL,但通过工具如MongoDB Compass或BI连接器,可以导出类似SQL的格式,但这些文件通常还是以.json或.csv结尾。 另外,用户可能是在迁移数据,或者需要执行脚本,所以需要指出正确的文件后缀和相关工具的使用方法。确保用户理解MongoDB的数据存储和操作方式与关系型数据库的不同之处,避免混淆。 最后,检查是否有其他可能的误解,比如用户是否想了解如何将SQL换为MongoDB的查询语句,或者如何导入导出数据。需要覆盖这些方面,确保回答全面且有用。</think>#### MongoDBSQL文件后缀的关联说明 --- ### **核心结论** MongoDB作为NoSQL数据库**不直接使用SQL文件**(*.sql),但可通过工具实现与SQL格式的交互。以下是MongoDB相关文件类型及其作用: --- ### **一、MongoDB原生文件类型** 1. **BSON数据文件** - **后缀**:*.bson - **用途**:MongoDB的二进制存储格式(类似关系型数据库的物理表文件) - **生成场景**:通过`mongodump`导出数据时生成 - **示例命令**: ```bash mongodump --db=test --out=/backup/ ``` 2. **元数据描述文件** - **后缀**:*.metadata.json - **用途**:记录集合的索引、配置等元信息 - **文件示例**: ```json {"options": {"validator": {}}, "indexes": [{"v":2, "key":{"_id":1}, "name":"_id_"}]} ``` --- ### **二、与SQL交互的关联格式** 1. **JSON导出文件** - **后缀**:*.json - **用途**:通过`mongoexport`导出为可读的JSON格式,可被SQL工具换 - **示例命令**: ```bash mongoexport --db=test --collection=users --out=users.json ``` 2. **CSV导出文件** - **后缀**:*.csv - **用途**:结构化数据导出,兼容SQL数据库导入 - **特殊参数**: ```bash mongoexport --type=csv --fields=name,age,email ``` 3. **SQL换中间文件** - **后缀**:*.sql(需第三方工具生成) - **工具示例**: - **MongoDB Connector for BI**:将MongoDB数据映射为SQL视图 - **自定义脚本**:使用Python/Ruby将JSON换为INSERT语句 --- ### **三、典型应用场景对比** | **场景** | MongoDB文件类型 | 类SQL实现方式 | |------------------------|----------------------|----------------------------------| | 数据库备份 | *.bson + *.metadata.json | 使用`mysqldump`生成*.sql对比 | | 跨数据库迁移 | *.json/*.csv | 通过ETL工具换为目标数据库的SQL | | 数据分析 | BI Connector虚拟表 | 直接编写类SQL查询(MongoDB聚合管道)| --- ### **四、SQL语法在MongoDB中的映射示例** ```sql -- SQL查询 SELECT name, COUNT(*) FROM orders WHERE total > 100 GROUP BY name; -- MongoDB等效聚合查询 db.orders.aggregate([ { $match: { total: { $gt: 100 } } }, { $group: { _id: "$name", count: { $sum: 1 } } } ]); ``` --- ### **五、注意事项** 1. **文件兼容性** - MongoDB的BSON文件需通过`mongorestore`恢复,不能直接用SQL工具打开 - JSON/CSV导出的数据类型可能丢失(如ObjectId、日期对象) 2. **事务处理差异** - SQL文件包含事务控制语句(`BEGIN TRANSACTION`/`COMMIT`) - MongoDB多文档事务需显式使用`session.startTransaction()` --- **总结**:MongoDB原生不依赖SQL文件,但可通过特定格式文件与SQL生态系统交互。开发者在跨数据库操作时,需关注数据换的完整性和类型匹配问题。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值