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']