gpt4 book ai didi

node.js - mongodb/mongoose addToSet 将对象添加到具有相同 id 的数组

转载 作者:可可西里 更新时间:2023-11-01 10:38:39 24 4
gpt4 key购买 nike

所以我遇到的问题是我只想给用户评论点赞一次,目前我正在使用 addToSet 运算符,因为根据定义,如果该值已经存在,它不会增加值。

但在我的例子中,它添加了,可能是因为我添加的是对象而不是值,当我添加 mongo 时会生成 _id?

这是我的事件模型:

  creator: {
type: Schema.Types.ObjectId,
ref: 'User'
},
comments: [
{
user: {
type: Schema.Types.ObjectId,
ref: 'User'
},
text: {
type: String,
required: true
},
likes: [
{
user: {
type: Schema.Types.ObjectId,
ref: 'User'
}
}
]
}
]
}

这是我的 addLike 函数:

commentLike: async (req, res) => {
console.log('working', req.params.id, req.params.idas, req.params.commentID);
Events.findOneAndUpdate(
{ _id: req.params.idas, comments: { $elemMatch: { _id: req.params.commentID } } },
{ $addToSet: { 'comments.$.likes': { user: req.params.id } } },
(result) => {
res.json(result);
}
);
}

当我添加 like 时,我的 likes 数组看起来像这样:

        "likes" : [
{
"user" : ObjectId("5b53442c1f09f525441dac31"),
"_id" : ObjectId("5b54a5263e65324504035eac")
},
{
"user" : ObjectId("5b4b4725a3a5583ba8f8d513"),
"_id" : ObjectId("5b54a5bb3e65324504035eb0")
},
]

最佳答案

你可以关注这个

db.collection.update(
{ "_id": req.params.idas, "comments": { "$elemMatch": { "_id": req.params.commentID, "likes.user": { "$ne": req.params.id } } } },
{ "$push": { "comments.$.likes": { "user": req.params.id } } }
})

如果你刚刚开始你的项目,那么你应该听从 JohnnyHK 的意见,让你的数组像这样让 $addToSet 可行

likes: [{ type: Schema.Types.ObjectId, ref: 'User' }]

关于node.js - mongodb/mongoose addToSet 将对象添加到具有相同 id 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51467190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com