Reputation: 5037
var keystone = require('keystone'),
Types = keystone.Field.Types;
var LeaderboardEntry = new keystone.List('leaderboardEntry', {
autokey: { path: 'slug', from: 'publicKey playername', unique: false }
});
LeaderboardEntry.add({
publicKey: { type: String, required: true, noedit: true },
playername: { type: String, required: true },
playerid: { type: String },
points: { type: Number, required: true },
/*data: { type: Mixed, required: false, unique: false },*/
publishedDate: { type: Types.Date }
});
The field data
needs to be of type Mixed but unfortunately there is not a matching KeystoneJS type.
Any ideas how this can be done within a keystone.List object?
Upvotes: 4
Views: 3055
Reputation: 21
You can define like this in your model file
var keystone = require('keystone');
var mongoose = require('mongoose'); // "npm i --save mongoose" of course
var Types = keystone.Field.Types;
var FBEntry = new keystone.List('FBEntry');
FBEntry.add({
type: { type: String, index: true },
// data: mongoose.Schema.Types.Mixed <--- define overhere will throw exception
});
FBEntry.schema.add({ data: mongoose.Schema.Types.Mixed }); // you should define outside .add()
FBEntry.defaultColumns = 'type, data';
FBEntry.register();
Upvotes: 0
Reputation: 808
A while back I ran into the same issue and ran across this Twitter post .. It won't show up in the admin UI, but it's possible to add a Mongoose field type this way.
Add this after your code above:
LeaderboardEntry.schema.add({ data: mongoose.Schema.Types.Mixed });
Upvotes: 13