我想使用mongoimport加载包含UUIDs字段的JSON文件。
创建JSON文件的程序序列化UUIDS,如下所示:
class Circle1: UIView {
var centerOfCirclesView: CGPoint{
return CGPoint(x:bounds.midX, y:bounds.midY)
}
var halfOfViewsSize: CGFloat{
return min(bounds.size.height, bounds.size.width) / 2
}
var lineWidth:CGFloat = 1.0
var color = UIColor(hue: 0.7194, saturation: 0, brightness: 0.52, alpha: 1.0)
//circle radius compute
var full = CGFloat.pi * 2
var quarter = CGFloat.pi / 2
var half = CGFloat.pi
var threeQuarters = 3 * CGFloat.pi / 2
func drawCircleCenteredAt(_:CGPoint, withRadius radius:CGFloat) -> UIBezierPath{
let circlePath = UIBezierPath(arcCenter: centerOfCirclesView,
radius: radius, // Changed this to radius
startAngle: 0,
endAngle: full,
clockwise: false)
circlePath.lineWidth = lineWidth
return circlePath
}
override func draw(_ rect: CGRect) {
color.set()
drawCircleCenteredAt(centerOfCirclesView, withRadius: halfOfViewsSize - 0.5 * 15.0).stroke()
}
}
在我要导入文档的集合中,UUID以二进制格式表示:
{ "_id": {"$uuid": "9ab62b5e-f34a-3854-b8bf-df7ee0102229"}, "foo": "bar" }
mongoimport不喜欢$ uuid位,并且
失败{ "_id" : BinData(3,"eT/WZXnp96m5uHOpApFSmg=="), "foo" : "bar"}
任何想法如何解决这个问题
答案 0 :(得分:0)
根据mongoimport文件
警告
避免使用mongoimport和mongoexport进行完整的实例制作 备份。它们不能可靠地保留所有丰富的BSON数据类型, 因为JSON只能表示支持的类型的子集 BSON。使用MongoDB Backup中描述的mongodump和mongorestore 这种功能的方法。
可以理解的是,UUID转为二进制数据并不属于有效的JSON数据类型,因此它失败了,你可以尝试mongodump它更健壮。
答案 1 :(得分:0)
我出去决定编写一个脚本,将$ uuid转换为$ binary,似乎被mongoimport接受,并且记录已正确插入到mongodb中。
这就是我使用它的方式:
cat exported.json | uuid_to_bindata.rb | mongoimport -h 127.0.0.1 -d mydb --collection mycollection
这是uuid_to_bindata.rb脚本。