gpt4 book ai didi

node.js - 将项目名称添加到 keystone.js 中的关系字段

转载 作者:搜寻专家 更新时间:2023-10-31 22:48:18 25 4
gpt4 key购买 nike

有没有人有在 keystonejs 中向关系字段添加名称的好例子?现在它只保存一个 id,所以如果我需要在 jade 模板中显示该字段名称,我还需要查询该关系模型。理想情况下是这样的:

var keystone = require('keystone'),
Types = keystone.Field.Types;

/**
* Titles Model
* =============
*/

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

Title.add({
name: { type: String, required: true, initial: true },
room: { type: Types.Relationship, initial: true, required: true, ref: 'Screening', addNew: false },
businessUnit: { type: Types.Relationship, initial: true, required: true, ref: 'BusinessUnit', addNew: false }
});

Title.defaultSort = '-createdAt';
Title.defaultColumns = 'name, room';
Title.register();

会像这样保存:

title = {
name: 'name',
room: 3141234123442,
businessUnit: {
name: 'business name',
_id: 123412341234
}
}

如果没有示例,如果有人可以引导我完成有关执行自定义关系字段类型以存储关系选择菜单中的值和 id 的最佳实践,我可能会弄明白。该站点的每个集合中将包含 1000 份文档,因此我现在需要关注性能和最佳实践。

最佳答案

你还不能用 Keystone 让它像这样保存,但你可以这样做,这样你就可以按照你想要的方式将对象传递给你的 jade 模板。

您只需要根据 mongoose/mongodb 功能“填充”关系字段。

**因此您的 businessUnit 模型可能如下所示:

var keystone = require('keystone');
var Types = keystone.Field.Types;

var BusinessUnit = new keystone.List('BusinessUnit', {
autokey: { from: 'name', path: 'key', unique: true },
plural: 'BusinessUnits'
});

BusinessUnit.add({
name: { type: String, required: true },
});
BusinessUnit.relationship({ ref: 'Title', path: 'title', refPath: 'businessUnit' });
BusinessUnit.register();

你的 Title 模型如上

var keystone = require('keystone'),
Types = keystone.Field.Types;

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

Title.add({
name: { type: String, required: true, initial: true },
room: { type: Types.Relationship, initial: true, required: true, ref: 'Screening', addNew: false },
businessUnit: { type: Types.Relationship, initial: true, required: true, ref: 'BusinessUnit', addNew: false }
});

Title.defaultSort = '-createdAt';
Title.defaultColumns = 'name, room';
Title.register();

Controller 的重要部分可能如下所示

//Get all Titles with their nested businessUnits.
view.on('init', function(next) {
keystone.list('Title').model.find()
.populate('businessUnit')
.exec(function(err, results) {
if(err) {
console.log(err);
return next(err);
} else {
locals.data.titlesWithNestedBusinessUnits = results;
next(err);
}
});
});

作为旁注,根据 .populate 方法功能,这只会在 一个深度 下起作用。如果你想深入一些(效率很低),你可以使用 mongoose deep populatehttps://github.com/buunguyen/mongoose-deep-populate .

关于node.js - 将项目名称添加到 keystone.js 中的关系字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25335265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com