【问题标题】:Custom transform of Mongoose JSON into Javascript object将 Mongoose JSON 自定义转换为 Javascript 对象
【发布时间】:2015-10-27 11:03:12
【问题描述】:

我想将 Mongoose 接收的 JSON 作为查询的一部分指定为 Javascript 对象的自定义转换。通常使用JSON.parse() 或类似的东西。我想使用自己的转换函数,因为我想包含一个名为 __length 的新字段,它是通过网络接收的 JSON 的长度。我不想使用JSON.stringify(document_from_mongo).length(),因为我正在执行不必要的字符串化操作。

我已经研究过在架构上使用自定义 toObject() 或 toJSON() 方法,但没有任何成功。谢谢!

【问题讨论】:

  • 那么不幸的是,如果您想将字符串“length”注入返回的对象,那么您所说的“不想做”是唯一获得字符串“length”的地方,因为您需要进行字符串化为了确定。对我来说,这听起来有点多余,因为 Content-Length 应该设置在标题中(除非流输出),并且从对象内部读取该字符串长度的任何内容当然都需要首先“解析”对象,这限制了这样的数据。
  • Mongoose 使用流式接口。
  • 不,它没有。默认情况下,.find().aggregate() 等 mongoose 方法将数据作为数据数组或 findBy** 变体中的单个对象返回。对于输出流,您需要专门调用 .stream() (在 find 上,聚合的光标选项)或使用几乎相同的东西调用本机驱动程序方法。所以它不是一个流,而是一个普通的对象,除非你另有要求。即使您要求一个流,您要求的是所发出的 JSON 的“字符串长度”。如果不对对象或流进行字符串化,您将无法做到这一点。上面提到的关于实用程序的相同点。
  • 听起来不错,我对 Mongooses 内部结构的了解有限,因此我将深入研究。我确实认为您可以在不进行字符串化的情况下获得响应长度,因为它已经以这种方式从数据库服务器到达。使用 Content-Length 将非常适合我们需要的东西,所以在我尝试发布的其他解决方案后我会研究它。谢谢!

标签: javascript node.js mongoose


【解决方案1】:

您可以在架构级别设置自己的toJSON 实现,如下所示:

var mySchema = new Schema({});

mySchema.set('toJSON', {
    transform: function(doc, ret, options) {
        ret.__length = 'set what do need';
        return ret;
    }
});

mongoose.model('mySchema', mySchema );

【讨论】:

  • 在调用 transform 函数时,doc/ret 似乎都是 JS 对象。我也试过mySchema.methods.toJSON = function(),但两次我都不能在对象上调用长度。
猜你喜欢
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2018-06-19
  • 2011-01-15
  • 2015-10-09
相关资源
最近更新 更多