realm数据库
- 存储文件为 .realm文件
- 用起来比较类似mongodb
- realm的写操作需要在 .write() 函数中调用
- .create() 函数用于获取数据表的对象
- realm目前最高只支持到electron4.x
引入模块
const Realm = require('realm')
const path = require('path')
const { app } = require('electron')
定义数据表模型
const Test1 = {
name: 'Test1',
primaryKey: 'id',
properties: {
id: 'string', // String
content: 'data?', // ArrayBuffer
createdDate: 'date', // Date
type: {
type: 'string',
default: 'abc
},
list: { // List 关联Test2表
type: 'list',
objectType: 'Test2'
},
marked: 'bool', // Boolean
}
}
const Test2 = {
name: 'Test2',
primaryKey: 'id',
properties: {
id: 'string',
name: 'string'
}
}
realm 实例化
let realm = new Realm({
path: 存储路径/文件名.realm, // path.join(app.getPath('documents'), demo.realm)
schema: [Test1, Test2], // 数据表
schemaVersion: 1, // 数据库版本号
migration: (oldRealm, newRealm) => {} // 用于判断数据库版本号进行数据迁移、管理
})
写入
realm.write(() => {
// 新建Test1
let createObj= realm.create('Test1', {
id: 'sad13123',
content: 'new Buffer.from('test')',
createdDate: new Date(),
type: 'sdasdasda',
marked: false,
})
// 关联Test1写入Test2
createObj.list.push({
id: 'j12j3ij',
name: 'sss'
})
})
更新
realm.write(() => {
// 更新Test1的数据
let updateObj = realm.create('Test1', {
id: 'sad13123', // 更新的对象的主键 用于指明更新的对象
marked: true
})
// 更新关联的数据
updateObj.list.forEach(item => {
item.name = '新内容'
})
})
删除
// 获取要删除的对象
let delObj = realm.objectForPrimaryKey('Test1', 'sad13123')
realm.write(() => {
// 删除关联的内容
realm.delete(delObj.list)
// 删除本身
realm.delete(delObj)
})
查询
// 使用主键查询
let findObj = realm.objectForPrimaryKey('Test1', 'sad13123')
// 全查 (如需操作如筛选可以使用filter等数组函数进行操作)
let selectAll = realm.objects('Test1')
关闭数据库
取消对 .realm文件的占用,使用频率较高感觉可以不关闭数据库,关闭应用时也会关闭
realm.close()