Mongodb 保存后使用猫鼬瘦肉
因此,我尝试向返回的Mongodb 保存后使用猫鼬瘦肉,mongodb,mongoose,mongoose-schema,Mongodb,Mongoose,Mongoose Schema,因此,我尝试向返回的post添加一个键。但我似乎无法让lean()工作。保存后如何处理返回的帖子 我在想也许我需要像这样将lean添加到我的findById中Post.findById(req.params.id).lean().then()。但这不起作用,而且这只会使第一个初始帖子变为可变的。它会说 post.save不是一个函数 如果我像Post.findById(req.params.id).lean().then()那样做 我只想返回将要发送回客户端的对象,我不希望它们的密钥保存在实际文
post
添加一个键。但我似乎无法让lean()
工作。保存后如何处理返回的帖子
我在想也许我需要像这样将lean添加到我的findById
中Post.findById(req.params.id).lean().then()
。但这不起作用,而且这只会使第一个初始帖子变为可变的。它会说
post.save不是一个函数
如果我像Post.findById(req.params.id).lean().then()
那样做
我只想返回将要发送回客户端的对象,我不希望它们的密钥保存在实际文档中
Post.findById(req.params.id)
.then(post => {
if (
post.likes.filter(like => like.user.toString() === req.user.id)
.length === 0
) {
return res
.status(400)
.json({ notliked: "You have not yet liked this post" });
}
// Get remove index
const removeIndex = post.likes
.map(item => item.user.toString())
.indexOf(req.user.id);
// Splice out of array
post.likes.splice(removeIndex, 1);
// Save
post.save().then(post => {
post["liked"] = false; <-------
res.json(post);
});
})
出错
post.save不是一个函数
您只需在
indexOf
likes
数组中搜索req.user.id
即可
Post.findOne({ _id: req.params.id }).lean().then((post) => {
if (post.likes.indexOf(req.user.id) !== -1) {
post.isLiked = true
}
post.isLiked = false
res.json(post)
})
使用聚合更好
Post.aggregate([
{ "$match": { "_id": mongoose.Types.ObjectId(req.user.id) }},
{ "$addFields": {
"isLiked": { "$in": [mongoose.Types.ObjectId(req.user.id), "$likes"] }
}}
])
编辑:-如果要更新文档,请使用更新查询
Post.findOneAndUpdate(
{ _id: req.params.id },
{ $pull: { likes: { user: req.user.id } }},
{ new: true }
).then((post) => {
res.json(post)
})
喜欢的帖子模式
...
likes: [
{
user: {
type: Schema.Types.ObjectId,
ref: "users"
}
}
]
...
您想为请求的用户更新文档还是返回
liked
true或false?我想保存具有修改数组的更新文档,然后在响应正文中修改帖子我编辑了我的问题并修改了post
,然后保存并将其作为响应发送回,但仍然获得帖子。保存不是一个选项功能。我将不得不查看聚合,但希望使用第一种方法。您不需要使用。保存,因为您不想更新文档。按照我的第一个问题,我澄清了我对你最初问题的回答。对不起,更新了我的回答谢谢你,先生。我添加了我的模式,因此我所做的编辑对其他人有意义。
...
likes: [
{
user: {
type: Schema.Types.ObjectId,
ref: "users"
}
}
]
...