1

在 Keystone 管理列表视图中,方便的下载链接导出 CSV 文件中的所有列表项,但是,如果某些字段是关系类型,则导出的 CSV 包含 Mongo ObjectIDs 而不是有意义的字符串(名称、标题等),这将是有用。

如何强制 ObjectID 被另一个字段映射/替换?

4

1 回答 1

1

Keystone 有一个未记录的功能,允许您创建自己的自定义 CSV 导出功能。此功能是在 4 月添加的(请参阅KeystoneJS 问题 #278)。

您需要做的就是向名为toCSV. 当指定为此方法的参数时,Keystone 将注入以下任何依赖项。

 - req (current express request object)
 - user (currently authenticated user)
 - row (default row data, as generated without custom toCSV())
 - callback (invokes async mode, must be provided last)

例如,您可以使用 Mongoose Model.Populate方法将任何关系字段的对象 ID 替换为您想要的任何数据。

假设您有一个Post列表,其中包含一个author字段Types.Relationship到另一个列表(比方说User),该列表具有一个name字段。您可以通过执行以下操作将author对象 ID 替换为作者的姓名(来自User列表)。

Post.schema.methods.toCSV = function(callback) {

    var post = this,
        rtn = this.toJSON();

    this.populate('author', function() {
        rtn.author = post.author.name; // <-- author now has data from User list
        callback(null, rtn);
    });

};

.toCSV()将为每个返回的文档调用Model作为上下文。当异步使用时(如上所述),您应该通过将新 CSV 数据作为回调的第二个参数传递来返回新 CSV 数据的 JSON 表示。当同步使用它时,只需返回更新的 JSON 对象。

于 2014-08-27T00:35:33.963 回答