Browse Source

Major performance boost to attachLinks -> makes CSV upload much more snappy.

pull/684/head
mike12345567 6 years ago
parent
commit
ec6717468b
  1. 23
      packages/server/src/db/linkedRecords/index.js
  2. 2
      packages/server/src/db/linkedRecords/linkUtils.js

23
packages/server/src/db/linkedRecords/index.js

@ -88,23 +88,24 @@ exports.attachLinkInfo = async (instanceId, records) => {
records = [records]
wasArray = false
}
let modelIds = [...new Set(records.map(el => el.modelId))]
// start by getting all the link values for performance reasons
let responses = await Promise.all(
records.map(record =>
getLinkDocuments({
instanceId,
modelId: record.modelId,
recordId: record._id,
includeDocs: IncludeDocs.EXCLUDE,
})
let responses = [].concat.apply(
[],
await Promise.all(
modelIds.map(modelId =>
getLinkDocuments({
instanceId,
modelId: modelId,
includeDocs: IncludeDocs.EXCLUDE,
})
)
)
)
// can just use an index to access responses, order maintained
let index = 0
// now iterate through the records and all field information
for (let record of records) {
// get all links for record, ignore fieldName for now
const linkVals = responses[index++]
const linkVals = responses.filter(el => el.thisId === record._id)
for (let linkVal of linkVals) {
// work out which link pertains to this record
if (!(record[linkVal.fieldName] instanceof Array)) {

2
packages/server/src/db/linkedRecords/linkUtils.js

@ -27,10 +27,12 @@ exports.createLinkView = async instanceId => {
let doc2 = doc.doc2
emit([doc1.modelId, doc1.recordId], {
id: doc2.recordId,
thisId: doc1.recordId,
fieldName: doc1.fieldName,
})
emit([doc2.modelId, doc2.recordId], {
id: doc1.recordId,
thisId: doc2.recordId,
fieldName: doc2.fieldName,
})
}

Loading…
Cancel
Save