mongoimport无法从JSON文件加载$ uuid字段

时间:2017-01-30 22:52:49

标签: json mongodb uuid mongoimport

我想使用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"}

任何想法如何解决这个问题

2 个答案:

答案 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脚本。