Mongoose id 函数返回 null

Mongoose id function returning 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

知道我做错了什么吗?

我可能是错的,但我以前从未在 Mongoose 中看到过那种 API。

document.id 存在,但它是 returns _id 字段的字符串化版本的函数。

在您的情况下,您可以循环遍历列表并 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']

MongooseDocumentArray.id(id) 方法在文档数组中搜索 _id 属性,但您的子文档没有 _id 属性,它们取而代之有 id。您要么必须将其更改为 _id,要么使用普通的旧 .filter() 或类似的解决方法。