I predefine schema by myself.
export const Counter = {
className: "Counter",
fields: {
field_Name: {type: 'String'},
value: {type: 'Number'},
class_Name: {type: 'String'},
},
classLevelPermissions: {
find: {},
count: {},
get: {},
update: {},
create: {},
delete: {},
protectedFields: {},
},
}
and use the parse.schema
var schemas = [Counter]
for (let i = 0; i < schemas.length; i++) {
const className = schemas[i].className;
const fileds = schemas[i].fields;
const keys = Object.keys(fileds);
logInfo("className: " + className);
const schema = new Parse.Schema(className);
let needCreate = true;
try {
const oldSchema = await schema.get();
needCreate = false;
} catch (e) {
needCreate = true;
}
for (let j = 0; j < keys.length; j++) {
const key = keys[j];
const value = fileds[key];
const type = value.type;
const defaultValue = value.defaultValue;
const targetClass = value.targetClass;
if (type === "Number") {
if (defaultValue) {
schema.addNumber(key, {defaultValue: defaultValue});
} else {
schema.addNumber(key);
}
} else if (type === "Boolean") {
if (defaultValue) {
schema.addBoolean(key, {defaultValue: defaultValue});
} else {
schema.addBoolean(key);
}
} else if (type === "String") {
if (defaultValue) {
schema.addString(key, {defaultValue: defaultValue});
} else {
schema.addString(key);
}
} else if (type === "Date") {
if (defaultValue) {
schema.addDate(key, {defaultValue: defaultValue});
} else {
schema.addDate(key);
}
} else if (type === "Array") {
if (defaultValue) {
schema.addArray(key, {defaultValue: defaultValue});
} else {
schema.addArray(key);
}
} else if (type === "Pointer") {
if (defaultValue) {
schema.addPointer(key, targetClass, {defaultValue: defaultValue});
} else {
schema.addPointer(key, targetClass);
}
}
}
if (needCreate) {
logInfo("create " + className)
await schema.save();
logInfo("create " + className + " success");
} else {
logInfo("update " + className);
await schema.update();
logInfo("update " + className + " success");
}
}