如何在realm数据库javascript中保存数据

时间:2018-05-17 18:14:18

标签: javascript react-native realm realm-mobile-platform

我是反应原生的新手,并为我的应用程序使用realm数据库。我想通过json预先填充我的数据。我尝试使用componentDidMount()函数并使用for循环来插入数据。任何指导都会有所帮助。

以下是我的代码:

//架构文件:

function my_function($args)
{
    // ...

    // Code that creates the $result variable

    // ..

    // Execute the calback function, how??:
    $args['callback_function']; // Handle the $result
}

$args = array(
    'callback_function' => function($result)
                            {
                                // $result created in my_function()
                            }
);
my_function($args);

//在我的索引文件中,名为componentDidMount:

import booksdata from './books.json';

const Realm = require('realm');

const BooksSchema = {
    name: 'Books',
    primaryKey: 'id',
    properties: {
        id: 'int', // primary key
        name: 'string',
        author: 'string',
        publisher: 'string',
    },
};

const databaseSchema = {
    path: 'books.realm',
    schema: [BooksSchema],
    schemaVersion: 0, // optional
};

export const mountData = () => new Promise((resolve, reject) => {
    Realm.open(databaseSchema)
        .then((realm) => {
            // Create Realm objects and write to local storage
            realm.write(() => {
                booksdata.forEach(obj => realm.create(databaseSchema, {
                    id: Math.floor(Date.now() / 1000),
                    name: obj.name,
                    author: obj.author,
                    publisher: obj.publisher,
                }));
            });
        });
});

//我收到了警告

 componentDidMount() {
    mountData().then().catch((error) => {
      alert(`Insert error ${error}`);
    });
  }

2 个答案:

答案 0 :(得分:1)

您可以将JSON数据解析为JavaScript对象,但对象必须与您的架构匹配。

let objs = JSON.parse(data);
realm.write(() => {
    objs.forEach((obj) => realm.create('data', obj));
}

其中'data'是架构的名称。

答案 1 :(得分:0)

谢谢你们! 我犯了一个非常愚蠢的错误。在我的模式文件中,当我在领域中插入记录时,我没有传递我的模式的名称。而不是databaseSchema我应该传递模式的名称,即BooksSchema.name(Books)

export const mountData = () => new Promise((resolve, reject) => {
    Realm.open(databaseSchema)
        .then((realm) => {
            // Create Realm objects and write to local storage
            realm.write(() => {
                booksdata.forEach(obj => realm.create(BooksSchema.name, {
                    id: Math.floor(Date.now() / 1000),
                    name: obj.name,
                    author: obj.author,
                    publisher: obj.publisher,
                }));
            });
        });
});