在现有数据库上与 keystone 创建多对多关系
creating many to many relationship with keystone on existing database
我想在现有数据库中添加对象引用。
现在我有两个数据库(域和 LabConfigs)和 运行 并且它们都有我可以从 robomongo 看到的实例。
LabConfig 看起来像这样
id_:12345 (objectId)
labConfig: test1
id_:67890 (objectId)
labConfig: test2
域名看起来像这样
id_:8787897 (objectId)
domainName:ggogle.com
id_:34234234 (objectId)
domainName:fb.com
现在,当我使用以下架构启动 keystone 时。
****************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 都与域数组有关系。
在基石
- 从何处添加 keystone 开始,即建立这种多对多关系?
- 我应该在那个 ( init ) 函数中建立这种关系的查询是什么?
答案 1 --> 我搜索了太多并发现将它放在
中是个好主意
view.on('init', function())}
您的 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();
}
});
});
我想在现有数据库中添加对象引用。 现在我有两个数据库(域和 LabConfigs)和 运行 并且它们都有我可以从 robomongo 看到的实例。
LabConfig 看起来像这样
id_:12345 (objectId)
labConfig: test1
id_:67890 (objectId)
labConfig: test2
域名看起来像这样
id_:8787897 (objectId)
domainName:ggogle.com
id_:34234234 (objectId)
domainName:fb.com
现在,当我使用以下架构启动 keystone 时。
****************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 都与域数组有关系。
在基石
- 从何处添加 keystone 开始,即建立这种多对多关系?
- 我应该在那个 ( init ) 函数中建立这种关系的查询是什么?
答案 1 --> 我搜索了太多并发现将它放在
中是个好主意 view.on('init', function())}
您的 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();
}
});
});