我尝试使用Mongoose来console.log(record._id)我的mongodb集合中的所有记录。我一直得到每个_id值的undefined
。
我一直在努力,直到遇到this post,然后我使用console.dir找到_id的位置,并在我的console.log中使用它:
MySchemaModel.find({}).then(function(records) {
records.forEach(function(record) {
console.log(record._doc._id); // <-- I added ._doc
});
});
但是,这看起来很糟糕。有更好的方法吗?
注意:这不仅仅是影响console.log的问题,我只是把问题缩小。
6条答案
按热度按时间4szc88ey1#
如果你想自定义/编辑记录,那么你应该使用
.lean()
函数。.lean()
函数会把它变成一个普通的JavaScript对象。如果你不使用.lean()
函数,那么每个记录仍然是一个mongoose文档,并且_id
在那个上下文中的行为是不同的。所以可以使用like**B:**当使用
.exec()
时,第一个参数用于错误,第二个参数用于成功数据。c8ib6hqw2#
Mongoose默认为每个模式分配一个id虚拟getter,它返回documents _id字段,该字段被转换为字符串,或者在ObjectIds的情况下,返回它的hexString。如果你不想在模式中添加id getter,你可以在构建模式时通过这个选项禁用它。
来源: Mongoose 文档
pcww981p3#
我想问题是。那么保证,我从来没有见过。
因此,只需尝试使用回调函数进行简单的.exec调用。
i7uq4tfw4#
问题是每个记录仍然是mongoose文档,_id在该上下文中的行为不同,.lean()函数会将其转换为普通的JavaScript对象。
nc1teljy5#
您也可以使用.map()方法:
pxy2qtax6#
如果您使用的是模型,则不会获得完整的对象,而是
_doc
的示例作为记录,因此您应该直接或
但是当你返回record作为响应时,你会得到完整的对象,所以最好使用
.find().lean()