Nedb:Node.js嵌入式NoSQL数据库 – 插入文档

相关推荐

Node.js嵌入式数据库Nedb – 快速上手

Nedb:Node.js嵌入式数据库 – 创建实例

Nedb:Node.js嵌入式数据库 – 存储引擎

数据类型

在 Nedb 中,一条数据记录称一条文档(document),文档中可以包含的数据类型有: String、Number、Boolean,、Date、null、Array,同时也可以是一个包含上述几种数据类型的对象。不同于 MongoDB,Nedb 不会存储 undefined 类型的字段。关于具体的存储形式,请参考下文中插入文档的例子。

类似于 MongoDB,Nedb 同样拥有一个特殊的字段 _id。_id 是每个文档必须拥有的具有唯一性约束的字段。如果你在插入文档时没有包含这个字段, Nedb 会自动为你生成一个长度为16位的、数字和字母组成的字符串 _id 的值。请注意,_id 一旦设置无法更改。

“$” 和 “.” 两个字符在 Nedb 中具有特殊用途,请不要在字段名中使用他们。

插入单条文档

标准数据类型

在前面几篇文章中,我们已经多次使用了 insert 接口进行文档的插入操作,这次我们尝试插入一条文档,不同以往简单的例子,这条文档将会包含上文提到的所有的数据类型:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

insert 接口中的 callback 是可选的,这里我们需要查看脚本的运行结果,所以每次调用都会定义一个 callback 函数:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

可以看到,我们的 doc 没有包含 _id 字段,Nedb 自动为我们生成了一个,这个 _id 是全局唯一的。

来看看demo.db的内容:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

Nedb 把一条文档存储在文件中的同一行,不会也不能换行。为做演示,我关闭了文本换行显示的功能,所以这里截图不完整。

undefined数据类型

我们尝试插入包含 undefined 数据的文档,看看会发生什么:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

运行脚本:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

等等,上文提到说 Nedb 不会保存 undefined 类型的数据,但返回结果中 newDoc 包含了 school 字段,发生了什么?不着急,我们去检查 demo.db:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

可以看到 Nedb 忽略了 school 字段。

不支持的数据类型

同样的,我们尝试插入一条新的文档,这个文档包含了一个特殊的字段:值是一个函数:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

脚本运行结果和 undefined 类似:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

数据文件中同样没有保存这个字段:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

实际上,只要是 Nedb 不支持的数据类型都会被忽略掉,同时不会出现报错,使用的过程中需要小心。

特殊字符

当我们尝试在文档的字段中使用字符“$” 或者 “.”时,Nedb 会返回一个错误:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

错误内容:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

插入多条文档

Nedb 支持同时插入两条甚至是多条文档,插入方式和支持的数据类型都和插入单条文档相同,唯一不同的是传入的参数是一个文档的数组:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

多条文档的插入结果:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

demo.db 分别把每一条文档存放在独立的一行中:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

请小心你的唯一索引

当你插入多条文档时,请小心创建了唯一索引的字段,文档列表中不能包含重复的值,例如:

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档

脚本运行时会抛出一个异常

Nedb:Node.js嵌入式NoSQL数据库 - 插入文档