Javascript Mongoose中toObject.transform中缺少字段\u id

Javascript Mongoose中toObject.transform中缺少字段\u id,javascript,node.js,mongodb,mongoose,mongoose-schema,Javascript,Node.js,Mongodb,Mongoose,Mongoose Schema,我正在mongoose中使用schema.toObject.transform 我的模式非常简单 const nodeSchema = new Schema({ }, { toObject: { transform: function (doc, ret) { return { myId: ret._id, }; } } }); const Node = mongoose.model('Node', nodeSchema); 我

我正在
mongoose
中使用
schema.toObject.transform

我的模式非常简单

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

const Node = mongoose.model('Node', nodeSchema);
我将此
schema
推送到具有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()
执行了完全相同的操作,但是当我使用
$addToSet
时,
\u id
中自动生成的id似乎已从
节点
对象中删除

我还尝试了变换函数中的
doc.\u id
而不是
ret.\u id
,但它没有改变任何东西

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


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

当您使用
console.log(node.toObject())您指的是一个尚未命中Mongo db的对象;你确定这就是你想要证明的吗?是的。因为通过调用
new Node()
,它已经创建了一个id,因此该对象与在数据库中创建的对象相同。为清晰起见,将记录节点与图形回调分开,并在
console.log(Node.toObject())时发布这两个
Node.toObject()
s的输出可能会很有用您指的是一个尚未命中Mongo db的对象;你确定这就是你想要证明的吗?是的。因为通过调用
new Node()
,它已经创建了一个id,因此该对象与在数据库中创建的对象相同。为清晰起见,将记录节点与图形回调分开,并发布两个
Node.toObject()
s的输出可能会很有用。