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()
或类似的解决方法。
我正在尝试从 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()
或类似的解决方法。