2013-01-31 72 views
0

我有一些對象要保存在數據庫中,但每次腳本執行時它們都必須是唯一的。這些對象只會改變應用程序的每個實例的值。問題在於,當我創建第一個對象時,每次執行腳本後都會創建更多副本。我嘗試再次使用同一個對象,但是當我執行查詢時,我從以前的執行中獲取對象,從而給我提供了錯誤的值。我只是希望能夠將相同的對象重置爲其默認值,並且不會在ScriptDb中擁有許多不必要的副本。如何避免ScriptDb中的重複項?

下面是一些代碼:

// Get a database instance 
var database = getDb(); 

// Create a new employee instance 
var myEmployee = { 
element: "currentEmployee", 
firstName: "", 
lastName: "", 
ID: 0, 
manager: "", 
managerEmail: "", 
department: "1 - University Store", 
startDate: "", 
endDate: "", 
regularHours: 0, 
vacationHours: 0, 
sickHours: 0, 
personalHours: 0, 
H2Hours: 0, 
overtimeHours: 0, 
totalHours: 0, 
rowLocation: 0, 
salaryType: "H", 
}; 

var week1 = { 
// Identify the week and for query purposes 
element: "Week1", 

// User entries 
HW: {THUR: 0, FRI: 0, SAT: 0, SUN: 0, MON: 0, TUES: 0, WED: 0}, 
VH: {THUR: 0, FRI: 0, SAT: 0, SUN: 0, MON: 0, TUES: 0, WED: 0}, 
SH: {THUR: 0, FRI: 0, SAT: 0, SUN: 0, MON: 0, TUES: 0, WED: 0}, 
PH: {THUR: 0, FRI: 0, SAT: 0, SUN: 0, MON: 0, TUES: 0, WED: 0}, 
TH: {THUR: 0, FRI: 0, SAT: 0, SUN: 0, MON: 0, TUES: 0, WED: 0}, 

// Calculated totals 
TotalHW:0, TotalVH: 0, TotalSH: 0, TotalPH: 0, TotalHours: 0, 

// Week totals 
Vacation: 0, Sick: 0, Personal: 0, H2: 0, OT: 0, Regular: 0, 
} 

var week2 = { 
// Identify the week and for query purposes 
element: "Week2", 

// User entries 
HW: {THUR: 0, FRI: 0, SAT: 0, SUN: 0, MON: 0, TUES: 0, WED: 0}, 
VH: {THUR: 0, FRI: 0, SAT: 0, SUN: 0, MON: 0, TUES: 0, WED: 0}, 
SH: {THUR: 0, FRI: 0, SAT: 0, SUN: 0, MON: 0, TUES: 0, WED: 0}, 
PH: {THUR: 0, FRI: 0, SAT: 0, SUN: 0, MON: 0, TUES: 0, WED: 0}, 
TH: {THUR: 0, FRI: 0, SAT: 0, SUN: 0, MON: 0, TUES: 0, WED: 0}, 

// Calculated totals 
TotalHW:0, TotalVH: 0, TotalSH: 0, TotalPH: 0, TotalHours: 0, 

// Week totals 
Vacation: 0, Sick: 0, Personal: 0, H2: 0, OT: 0, Regular: 0, 
} 

// Save these to the database 
database.save(myEmployee); 
database.save(week1); 
database.save(week2); 

然後,我會使用的語句ScriptDb.getMyDb.query({element: element}).next()檢索對象。包含「currentEmployee」,「Week1」或「Week2」的字符串元素。

+0

你可以顯示你使用的代碼嗎? –

+0

已添加代碼。採取很多,希望你能幫助我。 –

+0

關於如何嘗試編輯數據庫中的元素,仍然沒有完全清楚。如果你想在db中編輯某些東西,你必須先檢索它,然後進行更改並重新保存。 – fooby

回答

1

爲避免在ScriptDb中重新創建對象,必須首先檢查您想保存的對象是否已存在。如果是,則需要獲取存儲對象的句柄以用於更新。如果它不在那裏,那麼你的新對象將會是save(),並且返回值將是數據庫中副本的句柄。

的一般模式是這樣的:

// Get a database instance 
var db = getDb(); 

var result = db.query({key:keyval, ...}); 
if (result.hasNext()) { 
    // The object already exists in ScriptDb 
    var obj = result.next() 
} 
else { 
    // The object doesn't exist in ScriptDb, so create it 
    // This example would start by creating only the key values, 
    // expanding the object during the update stage below. 
    // Alternatively, you could create the entire object with all 
    // its properties. 
    obj = db.save({key:keyval, ...}) 
} 

// Can now update the obj that is in ScriptDb 
obj.prop1 = value1; 
obj.prop2 = value2; 
... 

// Save updated object 
db.save(obj); 

下面是該模式實現瞭如何應用到你的代碼的例子。您會在這裏看到正在使用創建新對象的替代方法,其中新的對象是在ScriptDb中創建的,並且它的所有屬性一次性創建。

// Get a database instance 
var database = getDb(); 

// Find or create employee instance 
var result = database.query({element: "currentEmployee"}); 
if (result.hasNext()) { 
    var myEmployee = result.next(); 
} else { 
    myEmployee = database.save({ 
    element: "currentEmployee", 
    firstName: "", 
    lastName: "", 
    ID: 0, 
    manager: "", 
    managerEmail: "", 
    department: "1 - University Store", 
    startDate: "", 
    endDate: "", 
    regularHours: 0, 
    vacationHours: 0, 
    sickHours: 0, 
    personalHours: 0, 
    H2Hours: 0, 
    overtimeHours: 0, 
    totalHours: 0, 
    rowLocation: 0, 
    salaryType: "H" 
    }); 
}; 

// Find or create Week1 instance 
result = database.query({element: "Week1"}); 
if (result.hasNext()) { 
    var week1 = result.next(); 
} else { 
    week1 = database.save({ 
    // Identify the week and for query purposes 
    element: "Week1", 

    // User entries 
    HW: {THUR: 0,FRI: 0,SAT: 0,SUN: 0,MON: 0,TUES: 0,WED: 0}, 
    VH: {THUR: 0,FRI: 0,SAT: 0,SUN: 0,MON: 0,TUES: 0,WED: 0}, 
    SH: {THUR: 0,FRI: 0,SAT: 0,SUN: 0,MON: 0,TUES: 0,WED: 0}, 
    PH: {THUR: 0,FRI: 0,SAT: 0,SUN: 0,MON: 0,TUES: 0,WED: 0}, 
    TH: {THUR: 0,FRI: 0,SAT: 0,SUN: 0,MON: 0,TUES: 0,WED: 0}, 

    // Calculated totals 
    TotalHW: 0, TotalVH: 0, TotalSH: 0, TotalPH: 0, TotalHours: 0, 

    // Week totals 
    Vacation: 0, Sick: 0, Personal: 0, H2: 0, OT: 0, Regular: 0, 
    }); 
} 

// Find or create Week2 instance 
result = database.query({element: "Week2"}); 
if (result.hasNext()) { 
    var week2 = result.next(); 
} else { 
    week2 = database.save({ 
    // Identify the week and for query purposes 
    element: "Week2", 

    // User entries 
    HW: {THUR: 0,FRI: 0,SAT: 0,SUN: 0,MON: 0,TUES: 0,WED: 0}, 
    VH: {THUR: 0,FRI: 0,SAT: 0,SUN: 0,MON: 0,TUES: 0,WED: 0}, 
    SH: {THUR: 0,FRI: 0,SAT: 0,SUN: 0,MON: 0,TUES: 0,WED: 0}, 
    PH: {THUR: 0,FRI: 0,SAT: 0,SUN: 0,MON: 0,TUES: 0,WED: 0}, 
    TH: {THUR: 0,FRI: 0,SAT: 0,SUN: 0,MON: 0,TUES: 0,WED: 0}, 

    // Calculated totals 
    TotalHW: 0, TotalVH: 0, TotalSH: 0, TotalPH: 0, TotalHours: 0, 

    // Week totals 
    Vacation: 0, Sick: 0, Personal: 0, H2: 0, OT: 0, Regular: 0, 
    }); 
} 

// At this point, myEmployee, week1 and week2 refer to the ScriptDb objects. 
// While we can use them as any javascript object, they also contain information 
// relevant to their state as ScriptDb objects. 
...