Ale*_*lls 7 mongoose mongodb node.js
我有这个Mongoose架构:
var postSchema = mongoose.Schema({
postId: {
type: Number,
unique: true
},
upvotes: [
{
type: Number,
unique: true
}
]
});
Run Code Online (Sandbox Code Playgroud)
用什么最好的查询来获得upvotes数组的长度?我不相信我需要使用聚合,因为我只想查询一个模型,只需要给定模型的upvotes数组的长度.
真的很难在网上找到这个信息 - 我搜索的所有内容都提到了我认为不需要的聚合方法.
另外,作为旁注,upvotes数组的唯一模式属性不起作用,也许我做错了.
find结果只能包含来自文档本身1的内容,同时aggregate可以投影从doc的内容派生的新值(如数组的长度).这就是为什么你需要使用aggregate它,即使你只获得一个文档.
Post.aggregate([{$match: {postId: 5}}, {$project: {upvotes: {$size: '$upvotes'}}}])
Run Code Online (Sandbox Code Playgroud)
1 单个异常是$meta投影操作符,用于投影$text查询结果的分数.
我通常不喜欢缓存值,但是可以选择(在找到此stackoverflow答案后,我将针对用例进行处理)以在更新记录时计算字段的长度pre('validate')挂钩。例如:
var schema = new mongoose.Schema({
name: String,
upvoteCount: Number,
upvotes: [{}]
});
schema.pre('validate', function (next) {
this.upvoteCount = this.upvotes.length
next();
});
Run Code Online (Sandbox Code Playgroud)
只需注意,您需要通过使用find加载对象然后使用保存更改的方式以猫鼬方式进行更新object.save()-请勿使用findOneAndUpdate
| 归档时间: |
|
| 查看次数: |
11386 次 |
| 最近记录: |