由于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开始,我认为最好将它们线性存储。
答案 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));
});
如果有问题,请告诉我。