1

嗨,提前感谢您的帮助。我无法在其他帖子上找到这个问题或解决方案,如果我错过了,请告诉我。

我的问题是,在导出并导入另一个集合后,我看到一些字段的 $type 值发生了变化。我在环境 A 的集合中有数据,我想将其导出并导入到不同的环境 B。查看环境 A 中的源数据时,所有类型的字段都是正确的 64 位整数($type 18 -来自文档)。但是,一旦将数据导入到环境 B 中,720 个文档中的 5 个的 $type 为 16(32 位整数)。

环境 A 的输出:

mongos> db.myCollection.count()    
720
mongos> db.myCollection.count({createTime : {$type : 16}})
0
mongos> db.myCollection.count({createTime : {$type : 18}})
720

使用等效命令从环境 A 导出数据: mongoexport --host my.environment.a.host.com -d myDb -c myCollection -o outputFile.json

使用等效命令将数据导入环境 B: mongoimport --host my.environment.b.host.com -d myDb -c myCollection --file outputFile.json

查看环境 B 中的数据,我看到以下计数/类型:

db.plaAdGroupDoc.count()
0
db.productDoc.count({createTime : {$type : 16}})
5
db.productDoc.count({createTime : {$type : 18}})
715
db.productDoc.count( )
720

我不清楚为什么该字段的类型从导入中发生了变化。而且,为什么只有一小部分字段发生了变化。任何见解将不胜感激。

谢谢!

编辑:已解决(无法在 8 小时内回答问题) 再看一下,似乎导入为 32 位整数($type 16)的 5 个整数的值为 0,而不是大值。这似乎是他们默认使用整数而不是 64 位整数的原因。问题已解决。

希望这对其他人有帮助!

4

1 回答 1

2

如果您在两个 mongoDB 实例之间移动数据,则不应使用 mongoexport 和 import。这些工具旨在与外部系统交换数据。

改用 mongodump 和 mongorestore - 它们使用bsonMongoDB 的原生格式,并且保留所有类型。

于 2013-06-22T03:45:09.287 回答