Mongoose - 检索到的文档中没有“_id”属性
Posted
技术标签:
【中文标题】Mongoose - 检索到的文档中没有“_id”属性【英文标题】:Mongoose - no '_id' property in retrieved documents 【发布时间】:2016-09-09 12:47:24 【问题描述】:我有一个使用 Meteor 和外部 nodejs 服务器编写的网站,该服务器与流星的 mongo 一起使用。我在 Meteor 端的集合 tradeOffers
中创建新文档,并在外部服务器上轮询此集合中的新文档(我使用猫鼬)。除了 mongoose 返回没有“_id”属性的文档外,一切正常。
我的代码是这样的:
// Meteor
var TradeOffers = new Mongo.Collection('tradeOffers');
TradeOffers.insert( ... );
// Mongoose
var tradeOfferSchema = new mongoose.Schema( ... , collection: 'tradeOffers' );
var TradeOffer = mongoose.model('TradeOffer', tradeOfferSchema);
TradeOffer.find().exec(function(err, results)
results.forEach(function(tradeOffer)
console.log(tradeOffer._id); // undefined
);
);
我注意到在 Meteor 中创建的文档具有“String”类型的“_id”字段,而使用 mongoose 创建的文档具有“ObjectId”类型的“_id”。但即使这是问题所在,我该如何解决呢?我找不到任何信息。提前谢谢你。
【问题讨论】:
你自己回答了_id
是一个 ObjectId
无法像这样记录,你需要将其解析为字符串 console.log(tradeOffer._id.toString());
。另见this question
@DerTieran 已经尝试过了。它说'Cannot read property 'toString' of undefined'.
@DerTieran 如果您从console.log
看到,您尝试记录的内容要么有其toString
以返回"undefined"
,要么是所述字符串,或者它确实是undefined
(最可能的结果)。
@starky 你有没有尝试记录整个对象,所以console.log(tradeOffer)
以便查看_id
是否已定义?
你试过log
整个对象吗?您的架构如何?您是否设置了_id
和id
选项之一?您能否验证对象在数据库中是否具有 Id(例如,使用 mongo
客户端)。
【参考方案1】:
通过将_id: String,
添加到架构定义来解决。
【讨论】:
以上是关于Mongoose - 检索到的文档中没有“_id”属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mongoose 的嵌入式文档中检索数组的最后一个对象?