更新keystone.js中的模型数据库模式

时间:2017-07-26 14:44:32

标签: javascript node.js keystonejs

我在keystone.js中创建了一个新模型'Product.js'。

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

var Product = new keystone.List('Product', {
    map: {name: 'title'},
    singular: 'Product',
    plural: 'Products',
    autokey: {path: 'slug', from: 'title', unique: true}
});

Product.add({
    title: {type: String, required: true}, 
    price: {type: Number},
    qty: { type: Number },
    description: {type: Types.Html, wysiwyg: true, height: 300},
    image: {type: Types.CloudinaryImage},
    publishedDate: {type: Date, default: Date.now}
});

Product.register();

我在管理员界面看到了这些属性。现在我想更新它并动态添加一个新属性(不更改此文件中的任何内容)。在路由文件product.js中,我能够创建新实例(在this文章后面)来填充像这样的现有属性。

keystone.createItems({
    Product: [{
        title: 'Product 3',
        price: 34,
        qty: 4,
        description: "sldfkjslkfjlskdjfsdfj",       
        __ref: 'prod'
    }]
}, function (err, stats) {
    stats && console.log(stats.message);
});

是否有任何类似的功能可用于更改产品架构?

我想在mongoose db中添加此模型中的新属性。我该怎么做? keystone.js在windows中存储db文件在哪里?

1 个答案:

答案 0 :(得分:0)

架构不应在运行时进行修改,尤其是在Keystone中用于生成管理UI的方式。

这是一篇关于在没有架构的情况下使用Mongo的有趣文章:MongoDB: To Use Schemas or Not?

以下是mongoose团队对类似问题的看法:Dynamically adding fields in the schema doesn't permit to add fields as usual

如果你要“无模式”或使用Mixed Types,Keystone可能不是你想要使用的平台,因为它需要在构建时通过设计定义模式。