gpt4 book ai didi

node.js - Object.assign() 在分配 mongoose 文档时创建奇怪的属性

转载 作者:搜寻专家 更新时间:2023-10-31 22:38:05 24 4
gpt4 key购买 nike

MessageThread.findById(req.body._id)
.populate({ path: "messages" })
.exec((err, foundMessageThread) => {
var filtered = foundMessageThread.messages.map(message=>{
return Object.assign({}, message, {isRead: true});
})
console.log("filtered", filtered);

});

console.log 显示:

{ '$__':
InternalCache {
strictMode: true,
selected: {},
shardval: undefined,
saveError: undefined,
validationError: undefined,
adhocPaths: undefined,
removing: undefined,
inserting: undefined,
version: undefined,
getters: {},
_id: 5a4c7f2d8b49fc260c396f55,
populate: undefined,
populated: undefined,
wasPopulated: true,
scope: undefined,
activePaths: [Object],
pathsToScopes: {},
ownerDocument: undefined,
fullPath: undefined,
emitter: [Object],
'$options': true },
isNew: false,
errors: undefined,
_doc:
{ sentAt: 2018-01-03T06:58:53.188Z,
isRead: false,
_id: 5a4c7f2d8b49fc260c396f55,
sender: 5a4b77767251b44cd870219f,
reciever: 5a4b780a7251b44cd87021a1,
text: 'qwe',
__v: 0 },
'$init': true,
isRead: true },
......

它重复了很多次。我想它 (InternalCache { strictMode: true...) 与从 foundMessageThread 获取的 message 相关。它在分配时揭示了它的元数据(在我的术语中)。因为:

MessageThread.findById(req.body._id)
.populate({ path: "messages" })
.exec((err, foundMessageThread) => {
var filtered = foundMessageThread.messages.map(message=>{
console.log("message", message)
return Object.assign({}, message, {isRead: true});
})
console.log("filtered", filtered);

});

console.log 显示

{ sentAt: 2018-01-03T06:58:53.188Z,
isRead: false,
_id: 5a4c7f2d8b49fc260c396f55,
sender: 5a4b77767251b44cd870219f,
reciever: 5a4b780a7251b44cd87021a1,
text: 'qwe',
__v: 0 },
....

我的问题:

  1. 这是正常行为吗?
  2. 如果是怎么解决?因为“元数据”阻止了对象的分配。

附言我试过:

MessageThread.findById(req.body._id)
.populate({ path: "messages" })
.exec((err, foundMessageThread) => {
var filtered = foundMessageThread.messages.map(message=>{
return **Object.assign({}, message._doc, {isRead: true})**;
})
console.log("filtered", filtered);

});

最佳答案

这是 Mongoose 的正常行为。 mongoose 返回的对象包装了实际数据,以便向其添加行为(方法)。

您可以使用toObject 方法获取实际的数据对象,例如,message.toObject()

然而,有像 __v 这样的属性,mongoose 使用它们来进行内务管理。如果你不想要它们,你可以像这样修改 toObject 方法

messageSchema.set('toObject', {
versionKey: false,
transform: (doc, ret) => {
delete ret.__v;
return ret;
},
});

关于node.js - Object.assign() 在分配 mongoose 文档时创建奇怪的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48084655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com