Mongoose中的toObject.transform中缺少字段_id

时间:2016-09-06 15:10:09

标签: javascript node.js mongodb mongoose mongoose-schema

我在schema.toObject.transform中使用mongoose

我的架构非常简单

const nodeSchema = new Schema({
}, {
  toObject: {
    transform: function (doc, ret) {
      return {
        myId: ret._id,
      };
    }
  }
});

const Node = mongoose.model('Node', nodeSchema);

我将此schema推送到具有架构

的父模型
const graphSchema = new Schema({
  nodes: [nodeSchema]
});

使用mongoose语法

const node = new Node({});

Graph.findByIdAndUpdate(graphId, {
  $addToSet: {
    nodes: node
  }
}, (err, graph) => {
  console.log(node.toObject());
});

当我这样做时,使用自动生成的id正确转换对象,因为我直接引用const node = new Node({})

问题是当我尝试使用

检索所有节点时
Graph.findById(graphId, (err, graph) => {
  console.log(graph.nodes.map(node => node.toObject()));
});

现在我不会获得自动生成的ID。

我通过调用node.toObject()执行完全相同的操作,但是当我使用_id时,Node对象中的自动生成ID似乎已从$addToSet对象中移除。

我还在转换函数中尝试了doc._id而不是ret._id,但它没有改变任何内容。

我猜测的可能是错误的是我可能误解了toObject()的作用。每次我通过数组运行时都会自动调用它吗?

我只想以一种方式(特定结构)将我的值存储在我的集合中,但以另一种方式显示(另一种不同的结构)。所以我想我可以使用transform来选择我想要打印它的结构。

0 个答案:

没有答案