我的目标是在CommentFeed上添加评论,同时我想将该评论推送到topComments
字段中,并更新'numOfComments'。我想将topComments
限制为仅3条评论(我还要如何设置?)。以及如何获取numOfComments
的先前值并将其添加一个?
CommentFeed.findOneAndUpdate(
{ _id: commentId },
{
$push: {
comments: {
text: req.body.text
},
$push: topComments:{text: req.body.text}, <--- Limit this somehow to only allow an array length of 3?
$set: numOfComments: ? , <---What kind of logic is used here?
}
},
{ new: true }
)
CommentFeed架构
const CommentFeedSchema = new Schema({
topComments:[{text:{type:String}}],
numOfComments:{type:Number},
comments: [
text: { type: String, required: true }
]});
答案 0 :(得分:0)
对于第一个问题(限制topComments
数组大小),可以使用$slice
运算符。 other questions中已经回答了这个问题。 但是您可能会考虑使用projection参数中的topComments
运算符从comments
计算$slice
:
CommentFeed.find( {}, { comments: { $slice: -3 } } )
对于第二个问题(使用该文档中的现有字段更新文档),您不能通过简单的findOneAndUpdate
调用来完成。 other questions中也对此进行了讨论。
但是您可能会考虑计算numOfComments
,而不是每次都进行更新。您可以使用聚合框架的$size
运算符来做到这一点:
CommentFeed.aggregate({$project: { numOfComments: { $size:"$comments" }}})