我在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
来选择我想要打印它的结构。