2017-04-12 72 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”。 –