node.js - nodejs express mongoose - 试图将列表的长度作为模型中的虚拟参数作为响应
问题描述
在模型中使用虚拟参数,如何计算模型参数之一中列表的长度,并作为 api 调用的响应发回?
.... 服务器文件:server.js ....
//GET an ARRAY of users (and total counter of users) data via api
app.get('/api/v1/users', (req,res) => {
Userslist.find((err, userslists) => {
if (err){
res.send(err);
}else{
res.send(userslists);
}
});
});
....模型文件:Users.js ....
var userslistSchema = new Schema({
items: {type: mongoose.Schema.Types.ObjectId, ref: 'ArrayOfUser'},
},{
toObject: {virtuals: true}, toJSON: {virtuals: true}
})
userslistSchema.virtual('total')
.get(function() {return this.items.length})
module.exports = mongoose.model('Userslist', userslistSchema)
解决方案
两个问题:如果items应该是一个Array应该定义如下。
var userslistSchema = new Schema({
items: [{type: mongoose.Schema.Types.ObjectId, ref: 'ArrayOfUser'}],
},{
toObject: {virtuals: true}, toJSON: {virtuals: true}
})
其次在定义虚拟总量时。不处理没有项目的情况。适当地处理它下面的示例代码。PS - 这只是一个理解示例(可以更好地处理)
userslistSchema.virtual('total')
.get(function() {return (this.items && this.items.length) ? this.items.length : 0})
推荐阅读
- solr - 如何使用 SOLR 中的类型字符串获取?
- django - Django Sendgrid Heroku 设置
- java - 更改 TimePickerDialog 的输入模式
- javascript - Discord bot 也在读取旧前缀
- java - 如何在休眠中将结果存储到地图中?
- autodesk-forge - 从 Revit 文件中检索元数据
- python - 我的两个函数不能正常工作,IDE 不显示错误或崩溃
- arduino - ESP32/Arduino IDE:使用 ESPHttpUpdate 的 OTA 不断重启
- angular - 升级 Angular - 两个或更多项目使用相同的根警告
- scala - 如何在 spark scala 中保存数据帧之前对 spark 中的列进行分区并删除同一列