2017-04-12 74 views
0

我想在現有數據庫中添加對象引用。 現在我有兩個數據庫(域& LabConfigs)up &運行&他們都有我從robomongo可以看到的實例。與現有數據庫上的keystone創建多對多關係

LabConfigs這個樣子

  id_:12345 (objectId) 
     labConfig: test1 
     id_:67890 (objectId) 
     labConfig: test2 

域名看起來像這樣

  id_:8787897 (objectId) 
     domainName:ggogle.com 
     id_:34234234 (objectId) 
     domainName:fb.com 

現在,當我開始我的梯形,有以下模式。

****************LabConfigs*********************** 
var LabConfigs = new keystone.List('LabConfigs'); 

LabConfigs.add({ 
configName: {type: Types.Text, required: true, initial: true, index: true} 
}); 
LabConfig.defaultColumns = 'configName'; 
LabConfig.register(); 

************************************************ 

這是我的第二個數據庫。

var Domain = new keystone.List('Domain'); 

Domain.add({ 
    domainName: {type: Types.Text, required: true, initial: true, index: true}, 
    labConfigs :{type: Types.Relationship, ref: 'LabConfigs',required: false,many: true}, 
    userauthlevel:{ type: Types.TextArray} 
    }); 


Domain.defaultColumns = 'domainName'; 
Domain.register(); 

現在我想將labConfigs作爲數組添加到域數據庫中。即每個labConfigs與域陣列有關係。

在梯形

  1. 凡在梯形加起即建立這種多對多的關係?
  2. 我應該在哪個(init)函數中構建這個關係,我該做哪個查詢?

回答1 - >我搜索了太多&弄清楚,它是不錯的主意,有它在

view.on('init', function())} 

回答

1

你有你的Domain模型labconfigs領域,並且已經設置many: true在上面。現在,您可以在Domain文檔中指定一個LabConfig ID數組。當您保存Domain時,可以將labConfigs設置爲等於labConfig文檔ID的數組。您也可以自己創建一個labConfig的數組,而不是它們的ID。 Keystone將以相同的方式保存對象的引用。

view.on('post', function (next) { 
    var labConfigIDs = []; // Array of labConfig IDs, created however you want 
    domain.getUpdateHandler(req).process({ 
     labConfigs: labConfigIDs 
    }, { 
     flashErrors: true, 
     errorMessage: 'There was a problem updating your domain.' 
    }, function(err) { 
     if (err) { 
      req.flash("error", saveErr.message); 
      return next(); 
     } else { 
      req.flash('success', 'Your changes have been saved.'); 
      return next(); 
     } 
    }); 
}); 
+0

我可以做同樣的東西開始時梯形開始,而不是view.on(崗位)。我可以在view.on('init)上做同樣的事嗎?如果我們在開始時獲得新的+插入新的域值,那麼您的回覆是很好的。當我的兩個收藏品退出。 –

+0

不知道你在問什麼。模型及其信息在您的數據庫中仍然存在,所以當keystone啓動時('keystone.on('start')')我沒有看到需要做任何事情。如果您想在Keystone啓動時預填充一些數據(虛擬/測試值),使用[內置更新功能](http://keystonejs.com/docs/configuration/#updates)。 –

+0

userauthlevel是一個文本數組的數組。如何在userauthlevel中插入項?userauthlevel是一個字符串數組對於LabConfig數組中的每個對應值,值都爲「true/false」。 –