Mongoose ID函数返回null

我试图从MongoDB获取一个子文档。 我可以得到父文件,如下所示:

{ "_id" : ObjectId("5550a7948be994430f7df1b4"), "address" : "Grafton St, Dublin 2", "coords" : [ -6.2597468, 53.3422998 ], "facilities" : [ "food", "irish history" ], "name" : "Laura Dunphy", "openingTimes" : [ { "days" : "Monday - Friday", "times" : [ "10am", "12pm", "2pm" ] }, { "days" : "Saturday", "times" : [ "8am", "10am", "12pm" ] } ], "rating" : 3, "reviews" : [ { "author" : "Simon Holmes", "id" : ObjectId("5550c26e8c334adebc7c5dc3"), "rating" : 5, "timestamp" : ISODate("2013-07-15T23:00:00Z"), "reviewText" : "Great guide, it was fun." } ] } 

当我做:

 console.log('guide.reviews is '); console.log(guide.reviews); 

我懂了:

 guide.reviews is [{ id: 5550c26e8c334adebc7c5dc3, rating: 5, timestamp: Tue Jul 16 2013 00:00:00 GMT+0100 (IST), reviewText: 'Great guide, it was fun.', createdOn: Fri May 15 2015 18:20:57 GMT+0100 (IST), author: 'Simon Holmes' }] 

这很好。 但是当我尝试使用Mongoose id函数进行审阅时,我总是返回null:

 review = guide.reviews.id('5550c26e8c334adebc7c5dc3'); console.log('review is '); console.log(review); 

结果:

 review is null 

任何想法我做错了什么?

MongooseDocumentArray.id(id)方法search文档数组中的_id属性,但是您的子文档没有_id属性,而是具有id 。 您必须将其更改为_id ,或者使用普通的旧.filter()或类似的解决方法。

我可能是错的,但是我以前从来没有在Mongoose中看到过这种API。

document.id存在,但是它是一个返回_id字段的string化版本的函数。

在你的情况下,你可以通过循环遍历列表并select你想要的。

 var review = false for (var i = 0; i < guide.reviews.length; i++) { var el = guide.reviews[i] if(review._id == '5550c26e8c334adebc7c5dc3') { review = el } } 

如果使用lodash,则还可以使用indexBy方法将数组转换为散列,其中所有项都由指定的字段标识:

 var _ = require('lodash') var reviews = _.indexBy(guide.reviews, '_id') // Then you can do reviews['5550c26e8c334adebc7c5dc3']