记录中分别包含 DateTime 和 TimeStamp 两种数据 类 型, 这 两种 类 型如何互相 转换 ?
【解决 办 法】
【方法 1 】批量 转换 建 议 使用 导 入 导 出工具,操作方法如下:
1. 使用 sdbexprt 导出工具指定匹配条件,导出指定字段类型的记录
如 导 出 a 字段 类 型 为 date 的完整 记录 :
./sdbexprt -c foo -l bar --type csv --fields a,b,c,d --filter '{a:{$type:1,$et:9}}' --file foo.bar.csv
2. 删除集合中已导出的记录
如 删 除如上示例 a 字段 类 型 为 Date 的 记录
db.foo.bar.remove({a:{$type:1,$et:9}})
3. 使用 sdbimprt 导入工具指定导入 a 字段 类 型 为 timestamp
如 导 入上述示例中 a 字段:
./sdbimprt -c foo -l bar --fields 'a timestamp' --type csv --file foo.bar.csv
【 风险 】
导出记录是需要导出所有字段,否则导出后的记录可能不是完整记录,删除导出的记录再导入后部分记录可能缺少未被导出的字段;
【建 议 】
先 备 份所有 记录 再 执 行如上 导 入 导 出操作,如使用 导 入 导 出工具 备 份恢复所有数据
1. 导出所有记录
./sdbexprt -c foo -l bar --type json --file foo.bar.allRecords.json
2. 需要恢复原始数据 时 ,使用 导 入工具恢复所有 记录
./sdbimprt -c foo -l bar --type json --file foo.bar.allRecords.json
【 资 料参考】
导出工具: http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1479195621-edition_id-0
导入工具: http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1479195620-edition_id-0
$type 匹配符: http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1477878020-edition_id-302
【方法 2 】 单 条 / 少量数据 Date 转换为 Timestamp ,如果更新后的 值 不同可以使用 update 更新 记录
【 约 束】
更新前后 时间 一 样 , 则 update 更新 时认为值 一 样 不需要更新,如 {$date:"2019-01-01"} 更新 为 {$timestamp:"2019-01-01-00.00.00.000000"} ,如果更新 为 {$timestamp:"2019-01-01-00.00.00.000001"} 则可以更新
此 场 景在后 续 版本会 优 化(可能 3.2 以后版本),如果 值 一 样则 可以指定参数 强 制更新。
【 update 更新】
匹配 a 字段 类 型 为 date 的所有 记录 ,遍 历 每一条 记录 , 获 取原始 记录 a 字段的 值 ,更新 a 字段 类 型 为 timestamp , a 字段的 值为 原始 值 拼接后的 timestamp 格式的 值 ,如:
var cursor = db.foo.bar.find({a:{$type:1,$et:9}}); while(records = cursor.next()){ var aVal = records.toObj().a.$date; db.foo.bar.update({$set:{$timestamp: aVal + "-00.00.00.000001"}}, {a:{$date: aVal }})}
【 资 料操作】
update 更新: http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190847-edition_id-302
$type 匹配符: http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1477878020-edition_id-302
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69935160/viewspace-2652040/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/69935160/viewspace-2652040/