我有一个用户的猫鼬模式,该用户具有一个viewes_posts字段,该字段是一个对象数组,这些对象引用了另一个猫鼬模式(post)。现在,我想在此对象数组中添加两个以上字段。
我这样尝试过:
viewed_posts: [
{
hits: {type: Number, default: 0},
actualViewsByUser: {type: Number, default: 0},
type: mongoose.Schema.Types.ObjectId,
ref: "Post"
}
]
但是当我使用User.populate(“ viewed_posts”)函数时,它不会显示“ hits”和“ actualViewsByUser”,而只会显示帖子架构的完整字段。
这是我要访问这些字段的代码:
User.findById(req.user._id).populate("viewed_posts").exec(function(err,user){
if(err) console.log(err);
else{
console.log("usre found , now we are going to update the views")
Post.findOne({slug: req.params.slug},(err,post)=>{
if(err) console.log(err);
else{
user.viewed_posts.push(post);
user.save();
let index= 0;
console.log("viewed_posts.length",user.viewed_posts.length);
for(var i=0;i<user.viewed_posts.length;i++){
console.log("post.slug", post.slug)
console.log("user.viewed_posts.slug", user.viewed_posts[i].slug)
if(post.slug === user.viewed_posts[i].slug){
console.log(user.viewed_posts[i]);
index = i;
break;
}
}
console.log("index : ", index);
console.log("increasing number of hits each time this particular user visits this post");
console.log("user.viewed_posts.hits before : " , user.viewed_posts[index].data.hits)
user.viewed_posts[index].hits +=1;
console.log("user.viewed_posts.hits after : " , user.viewed_posts[index].data.hits)
console.log("increasing number of hits of the post no matter how many times any user visit here");
console.log("post.views before : " , post.views)
post.views +=1;
console.log("post.views after : " , post.views)
if(user.viewed_posts[index].actualViewsByUser != 4){
console.log("increasing number of actualViews of this post only if this user haven't visited more than 4 times");
console.log("post.actualViews before : " , post.actualViews)
post.actualViews +=1;
console.log("post.actualViews after : " , post.actualViews)
post.save((err,post)=>{
if(err) console.log(err)
else console.log("post saved sucessfully",post);
});
console.log("user.viewed_posts.actualViewsByUser after : " , user.viewed_posts[index].actualViewsByUser)
user.viewed_posts.actualViewsByUser += 1;
console.log("user.viewed_posts.actualViewsByUser after : " , user.viewed_posts[index].actualViewsByUser)
}
}
})
}
})
这是输出:
increasing number of hits each time this particular user visits this post
user.viewed_posts.hits before : undefined
user.viewed_posts.hits after : NaN
increasing number of hits of the post no matter how many times any user visit here
post.views before : 0
post.views after : 1
increasing number of actualViews of this post only if this user haven't visited more than 4 times
post.actualViews before : 0
post.actualViews after : 1
user.viewed_posts.actualViewsByUser after : undefined
user.viewed_posts.actualViewsByUser after : undefined
我该怎么做才能将这两个字段(hits,actualViewsByUser)集成到此字段(viewed_posts)中?任何帮助将不胜感激。
答案 0 :(得分:1)
因为必须指定要填充的字段。
User.findById(req.user._id).populate("viewed_posts", "hits actualViewsByUser", Post) // pass in the Post model as well (you'll have to import this).
我传入模型是因为之前有错误,因为猫鼬没有正确填写我的字段。
但是,我不确定您的方法是最好的方法。 “点击数”和“ actualViewsByUser”将通过ID引用特定的帖子。当您使用填充猫鼬时,将获取ID,查找相关帖子,然后填充适当的信息“匹配”,“ actualViewsByUser”等。“匹配”和“ actualViewsByUser”需要存储在您的Post模型中,不是您的用户模型。