有效地存储在JSONStore中

时间:2015-06-10 08:38:07

标签: javascript jsonstore

由于JSONStore与Native中的Relational Database的行为不同,我试图理解JSONStore以及如何在其中存储数据的最佳方式。

例如,如果我从服务器获得低于JSON的响应,并希望存储到离线存储:

{
    "CID": "1020",
    "CName": "Some names",
    "Documents": [
        {
            "DocumentID": "12987",
            "FilePath": "anyPath1",
            "Signatures": [
                {
                    "Path": "signPath1"
                },
                {
                    "Path": "signPath2"
                }
            ]
        },
        {
            "DocumentID": "12988",
            "FilePath": "anyPath2",
            "Signatures": [
                {
                    "Path": "signPath3"
                },
                {
                    "Path": "signPath4"
                }
            ]
        }
    ]
}

第一

我可以从其他论坛学到什么,它说要线性存储它们,但我相信多次存储相同的CID和DocumentID是多余的(例如),虽然我不知道如何存储一些(金额)无法定义)签名:

var collections = {};
var collectionName = 'someName';
collections[collectionName] = {};
collections[collectionName].searchFields = 
{CID: 'string', CName: 'string', DocumentID: 'string', FilePath: 'string'};

第二

或者我可以通过常用的关系数据库技术来实现:

客户

var customers = {};
var customersColl = 'customers';
customers[customersColl] = {};
customers[customersColl].searchFields = 
{CID: 'string', CName: 'string'};

文档

var documents = {};
var documentsColl = 'documents';
documents[documentsColl] = {};
documents[documentsColl].searchFields = 
{CID: 'string', DocumentID: 'string', FilePath: 'string'};

签名

var signatures = {};
var signaturesColl = 'signatures';
signatures[signaturesColl] = {};
signatures[signaturesColl].searchFields = 
{DocumentID: 'string', SignaturePath: 'string'};

使用这种技术时,我认为很难保持数据删除。例如:

要删除某些客户,我需要在文档中获取受尊敬的客户并删除签名中的尊重文档,并删除文档中的客户,因为没有外键可以自动执行'它

请告诉我哪一个/什么是最有效的方法。

第三

post开始,我认为最好将它们线性存储。

1 个答案:

答案 0 :(得分:0)

您可以使用其他搜索字段来防止重复,并且可以使文档对象成为实际的JSON对象。我在这里有一个例子。

var collection = {
    data : {
        searchFields : {'DocumentID': 'string', 'FilePath': 'string', 'Signatures.Path': 'string'},
        additionalSearchFields : {'CID': 'string', 'CName': 'string'}
    }
};

var data = [
    {
        'DocumentID': '1234',
        'FilePath': 'anyPath1',
        'Signatures': [
            {
                'Path': 'signPath1'
            },
            {
               'Path': 'signPath2'
            }
        ]
    },
    {
        'DocumentID': '12988',
        'FilePath': 'anyPath2',
        'Signatures': [
            {
                'Path': 'signPath3'
            },
            {
                'Path': 'signPath4'
            }
        ]
    }
];

var query = [
    {
        'equal': [{DocumentID: '1234'}]
    }
];

WL.JSONStore.destroy()
    .then(function (res) {
        console.log('store destroyed')
        return WL.JSONStore.init(collection);
    })
    .then(function (res) {
        console.log('collection  was created');
        return WL.JSONStore.get('data').add(data, {'additionalSearchFields': {'CID': '1020', 'CName': 'Some names'}});
    })
    .then(function (res) {
        console.log(res + ' doc(s) were added');
        return WL.JSONStore.get('data').advancedFind(query)
    })
    .then(function (res) {
        /* DOC1
            [
                {
                    "_id": 1,
                    "json": {
                        "DocumentID": "1234",
                        "FilePath": "anyPath1",
                        "Signatures": [
                            {
                                "Path": "signPath1"
                            },
                            {
                                "Path": "signPath2"
                            }
                        ]
                  }
           }
       ]
        */
        console.log('DOCS ' + JSON.stringify(res, null, 7));
        return WL.JSONStore.get('data').remove(res);
    })
    .then(function (res) {
        console.log(res + ' doc(s) was/were removed');
        return WL.JSONStore.get('data').findAll();
    })
    .then(function (res) {
        /*
            DOCS2 [
                      {
                         "_id": 2,
                         "json": {
                                    "DocumentID": "12988",
                                    "FilePath": "anyPath2",
                                    "Signatures": [
                                            {
                                              "Path": "signPath3"
                                            },
                                            {
                                              "Path": "signPath4"
                                            }
                                    ]
                              }
                      }
                 ]
        console.log('DOCS ' + JSON.stringify(res, null, 7));
        })
        .fail(function (err) {
           console.log('ERR ' + JSON.stringify(err));
        });

如果有问题,请告诉我。