【发布时间】:2021-02-05 22:34:18
【问题描述】:
我正在使用 mongoose 调用 findById,但它没有返回所有字段,或者至少它没有正确映射到某个字段。但如果我使用聚合,它会返回该字段
我有以下架构
const ratingSchema = new mongoose.Schema({
rating: {
type: Number,
default: 0,
min: 0,
max: 5
}
})
const locationSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
address: {
type: String,
required: true,
},
rating: ratingSchema,
facilities: [String],
});
locationSchema.index({coords: '2dsphere'});
mongoose.model('Location', locationSchema);
当我打电话时
const Loc = mongoose.model('Location');
const locationsReadOne = (req, res) => {
Loc
.findById(req.params.locationid)
.exec((err, location) => {
if (!location) {
return res.status(404).json({"message":"location not found"});
} else if (err) {
return res.status(404).json(err);
}
console.log("locationsReadOne:",location);
res.status(200).json(location);
});
};
它返回架构,但未返回评级字段。这是返回对象的 console.log:
locationsReadOne: {
facilities: [ 'Hot drinks', 'Food', 'Premium wifi' ],
_id: 5f88bfdc4df4ca7709462865,
name: 'Starcups',
address: '125 High Street, Reading, RG6 1PS'
}
如果我调用 Loc.aggregate,则返回评级字段:
{
_id: 5f8b2ee15b0b6784a847b600,
facilities: [ 'Tea', ' Restroom' ],
name: 'Tea Leaf',
address: '2192 Green St.',
rating: 0,
}
{
_id: 5f88bfdc4df4ca7709462865,
name: 'Starcups',
address: '125 High Street, Reading, RG6 1PS',
rating: 3,
facilities: [ 'Hot drinks', 'Food', 'Premium wifi' ]
}
知道为什么会发生这种情况吗?我可以清楚地看到 MongoDB 罗盘中每个文档中的评级字段,它们都被列为 Double 类型。为什么它们被汇总返回,而不是在 findById(id) 甚至在 find() 中?
谢谢。
【问题讨论】: