最近在捣鼓NER标注,对其标注结果进行存储,标注结果大体类似下图,记录文本中起始位置到结束位置的文本对应的标签值,本想使用MySQL进行存储得了,但整个文本其实涉及的关联操作不多,只是对数据的读写操作,且希望导出后的数据是这样的数据结构。查看mongodb不正是符合json形式操作,方便快捷的json操作可能给我带来便利,为此,记录下mongodb的一些常用操作。
mongodb:NoSQL的一种数据库(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。其主要未限制schema,不需要预先定义有哪些字段,可以看成就是一个文本,往文本中存多少字段都是开放的,只需要符合键值对(key=>value)规则即可。
document->collection
以下操作通过mongodb命令进行,python开发可使用第三方库:mongoengine
- 创建collections:db.createCollection()
也可以不预先创建,直接使用时mongodb会去判断文档是否存在 - 添加数据:db.col.insert(),如下创建一个数组字段tags
db.col.insert({"df":"test", "id":3, tags:[{"id":1,"start":2,"end":10}]}) - 查询数据:db.col.find(),如下查询tags数组内id为1的数据
db.col.find({"tags":{$elemMatch
:{"id":1}}})
指定输出字段:db.col.find({"id":3}, {"_id":0, "df":0, "id":0}) - 更新数据:db.col.update(
$condition
,$field
),update第一个参数是查询条件,第二个参数是需要更新哪些字段
通常数据更新:db.col.update({"id":3},{$set
:{"df":"test3"}})
数组内部数据更新:db.col.update({"id":3,"tags.id":1}, {$addToSet
:"tags":{"id":2,"start":3, "end":1}}) - 删除数据:db.col.update()/db.col.remove()
通常数据删除:
数组内部数据删除:db.col.update({"id":3}, {$pull
: {"tags":{"id":1}}})$pull
,$pullAll
,$pop
待续...