我正在用mongo DB和mongoose开发一个快速的js API。
我想在Javascript es6中创建一个由少量变量组成的对象和一个mongoose请求的结果,并希望用es6扩展运算符来实现:
MyModel.findOne({_id: id}, (error, result) => {
if (!error) {
const newObject = {...result, toto: "toto"};
}
});
问题是将扩展运算符应用于结果会以一种奇怪的方式对其进行转换:
newObject: {
$__: {
$options: true,
activePaths: {...},
emitter: {...},
getters: {...},
...
_id: "edh5684dezd..."
}
$init: true,
isNew: false,
toto: "toto",
_doc: {
_id: "edh5684dezd...",
oneFieldOfMyModel: "tata",
anotherFieldOfMyModel: 42,
...
}
}
我有点明白,对象结果是由mongoose丰富的,以允许与它进行特定的交互,但是当我在控制它之前,它描述了一个没有所有这些东西的简单对象。
我不想通过 ... result._doc 作弊,因为我抽象了这部分并且它不适合这种方式。也许有一种方法可以复制没有丰富内容的对象。
感谢您的时间。
答案 0 :(得分:21)
您可以使用Mongoose Document.toObject()
方法。它将返回从数据库中获取的基础纯JavaScript对象。
const newObject = {...result.toObject(), toto: "toto"};
您可以详细了解.toObject()
方法here。