3

我已经看到了一些与此相关的类似问题,但还没有找到答案。

我正在尝试在我的 Keystone 项目中创建一个类似于帖子的画廊,其中将有一个画廊列表,其中包含一个包含一组选定图像的画廊:

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

/**
 * Gallery Model
 * =============
 */

var Gallery = new keystone.List('Gallery', {
    map: { name: 'name' },
    autokey: { path: 'slug', from: 'name', unique: true }
});

Gallery.add({
    name: { type: String, required: true},
    published: {type: Types.Select, options: 'yes, no', default: 'no', index: true},
    publishedDate: { type: Types.Date, index: true, dependsOn: { published: 'yes' } },
    description: { type: String },
    heroImage : { type: Types.Relationship, ref: 'Image' },
    images : { type: Types.Relationship, ref: 'Image', many: true }
});

Gallery.defaultColumns = 'title, published|20%, publishedDate|20%';
Gallery.register();

我能够成功创建一个画廊 - 但任何后续画廊都会抛出错误:

保存更改时出错:insertDocument :: 由 :: 11000 E11000 重复键错误索引:site-name.galleries.$key_1 dup key: { : null } (MongoError)

我不知道我需要更改此模型以允许我的画廊的独特 slug 直接链接到等。

4

2 回答 2

6

从 MongoDB 中完全删除模型并重新启动。在使用先前定义的索引对模型进行更改时,我通常会看到此错误

于 2014-12-05T15:42:51.913 回答
0

插入新项目时,您应该为“名称”设置默认值,因为名称设置为唯一=真。就我而言,密钥设置为唯一。

前:

MongoDB Enterprise > db.categories.save({_id: 89,name: 'xxx'})
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 0,
    "nModified" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "E11000 duplicate key error collection: sku.productcategories index: key_1 dup key: { : null }"
    }
})

后:

MongoDB Enterprise > db.categories.save({_id: 89,name: 'xxx', key:'xx'})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 89 })
于 2017-11-08T14:18:56.303 回答