Loading

利用MongoEnigine避免脏数据的产生

脏数据产生原因

  • 常规mongo插入数据,无法校验类型,导致存入的数据和预期的数据类型有差异,且容易忽略此类问题(比如date类型)
  • dumpfile可能产生脏数据
  • 插入重复的字段,产生多余脏数据
  • 插入多余字段

利用mongoengine校验数据

  • mongoegine可以很好的避免以上问题的出现,减少脏数据产生的可能性

  • 唯一性约束
    MongoEngine允许你通过提供unique=True给Field构造函数来指定一个字段在集合中是唯一的。如果您尝试将与唯一字段具有相同值的文档保存为数据库的文档, NotUniqueError则会引发。您也可以使用下列方法指定多字段唯一性约束:unique_with可以是单个字段名称,也可以是字段名称的列表或元组

    class User(Document):
    	username = StringField(unique=True)
    	first_name = StringField()
    	last_name = StringField(unique_with='first_name')
    
    
  • 可以利用文档类型,控制是可以添加新字段
    动态文档(Dynamic Document)跟非动态文档(document)的区别是,动态文档可以在模型基础上新增字段,但非动态文档不允许新增。

    class ExampleFirst(Document):
    # 默认是一个空列表
    values = ListField(IntField(), default=list)
    
    class Page(DynamicDocument):
    title = StringField(max_length=200, required=True)
    
    

mongoenigine使用注意点

  • mongo可以识别的date类型格式为一下格式,注意在python中,datetime类型通过pymongo存入会被解析为一个date类型

    db.test.insertOne( { ts: new Timestamp() } );
    var mydate1 = new Date();
    var mydate2 = ISODate();
    
    

mongoexport和mongoimport注意点

  • mongoexport

    table=topic
    mongoexport \\
    --host 111.231.92.176 --port 29032 \\
    --username "spider"	--db spider \\
    --password "spider.1qaz@WSX" \\
    --collection topic \\
    -f _id,create_at,type,name, --type=csv \\
    --out ./topic.csv --forceTableScan
    
    
  • mongoimport

    mongoimport \\
    -h 111.231.92.176:29032 -d spider\\
    -u spider -p spider.1qaz@WSX \\
    --authenticationDatabase spider \\
    -c new_topic \\
    --type csv --headerline \\	
    --file ./topic.csv 
    
    
  • 为了保证无损import json到数据库,需要注意json中特定类型的格式(比如日期类型,要写成new Data()或者new timestamp()。。。)

mongoenigine知识点

  • 定义类型为int,插入str类型,不会报错,且插入的数据为str类型
  • 定义类型为int,插入double类型,会被转为int类型,同理定义double,插入int,会转为double
  • 插入值为None的数据,会被删掉,无法存入数据库
  • 存入空字符(忘了,待验证)

总结:存入与定义类型不相符的字段,可以转换的就转换,无法转换的保留存入的类型,空值,过滤掉,(这里忘了,定义date类型,存入字符串会怎样?待验证)

参考:https://blog.csdn.net/xinxianren007/article/details/100183982

posted @ 2021-01-06 13:31  Bob-Dylan  阅读(214)  评论(0编辑  收藏  举报