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整个对象吗?您的架构如何?您是否设置了_idid 选项之一?您能否验证对象在数据库中是否具有 Id(例如,使用 mongo 客户端)。 【参考方案1】:

通过将_id: String, 添加到架构定义来解决。

【讨论】:

以上是关于Mongoose - 检索到的文档中没有“_id”属性的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 检索没有 _id 字段的数据

mongodb 为每个检索到的文档添加计数器

mongodb 为每个检索到的文档添加计数器

如何在 Mongoose 的嵌入式文档中检索数组的最后一个对象?

如何在 Mongoose 的嵌入式文档中检索数组的最后一个对象?

找不到 id 并更新和增加子文档 - 返回 null Mongoose/mongoDB