Javascript 有没有办法找出为什么mongoose或mongoDB中的更新结果为0?
我在mongoose中有一个线程模型,它当然有一个Javascript 有没有办法找出为什么mongoose或mongoDB中的更新结果为0?,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我在mongoose中有一个线程模型,它当然有一个id字段和一个likes字段,其中包括所有以前喜欢过该线程的用户,因此人们不会两次喜欢同一个线程 const ThreadSchema = new mongoose.Schema({ author: { id: { type: ObjectID, required: true, ref: 'User' }, screen_name: { type: String, required: true },
id
字段和一个likes
字段,其中包括所有以前喜欢过该线程的用户,因此人们不会两次喜欢同一个线程
const ThreadSchema = new mongoose.Schema({
author: {
id: { type: ObjectID, required: true, ref: 'User' },
screen_name: { type: String, required: true },
picture: { type: String, required: true },
},
theme: { type: String },
text: { type: String, required: true },
comments: {
count: { type: Number, default: 0 },
},
likes: {
count: { type: Number, default: 0 },
users: [{
_id: false,
id: { type: ObjectID, ref: 'User' },
screen_name: { type: String },
picture: { type: String },
}],
},
}, {
timestamps: true,
});
在执行更新时,我将验证threadID
和likes.users.id
,并且仅在两个条件匹配时执行更新
addLike(threadID, user) {
return new Promise((resolve, reject) => {
this.updateOne(
{
_id: threadID,
'likes.users.id': { $ne: user.id },
},
{
$push: { 'likes.users': user },
$inc: { 'likes.count': 1 },
},
{ safe: true }
).exec()
.then((result) => {
if (result.nModified) {
resolve(result);
} else {
reject(new Error('Already liked or no such thread.'));
}
})
.catch((err) => {
reject(err);
});
});
};
它起作用了。我得到的结果是这样的:
{n:0,nModified:0,ok:1}
我可以使用nModified
来了解更新是否发生。
当nModified=0
时,表示没有任何更改。这意味着要么没有线程匹配threadID
,要么user.id已经在likes.users.id
中
我的问题是:
我想生成一个更清晰的错误消息,而不是“已经喜欢或没有这样的线程”。我想知道是哪种情况,是不是已经喜欢了?或者是没有这样的线程
我知道我可以通过findById
首先检查而不是更新来实现这一点。
但有更好的解决办法吗?谢谢,这不是一个错误。这是有意的,实际上表明提供的user.id
实际上已经存在于likes.users.id
中。这很清楚,因为n:0
,这意味着没有匹配的内容。这就是你的意图,因为你不想增加类似的计数,也不想在数组中使用投票。我很肯定,我已经向你指出,它已经非常详细地说明了为什么会出现这种情况,并且是有意的。也许你应该展示一个你必须修改的文档,你正在发送的数据以及你期望发生的事情。所以你要么传递了错误的信息,要么它正在做它应该做的事情。@NeilLunn是的,通过那篇文章学到了很多,谢谢。它完全有效。我只是想让错误信息更清楚。我的意思是,在应用程序级别自定义错误。:)然后在你的问题中加入更多细节,就像你被要求的那样!如果您不理解“为什么?”,请包括一个示例文档和您正在发送的更新参数。然后,我非常乐意进一步解释在这种情况下发生了什么。现在你的问题没有告诉我们什么。这就是为什么它没有答案。如果需要帮助,请提供数据。请。@NeilLunn抱歉耽搁了,请更新问题,现在应该更清楚了:)这不是错误。这是有意的,实际上表明提供的user.id
实际上已经存在于likes.users.id
中。这很清楚,因为n:0
,这意味着没有匹配的内容。这就是你的意图,因为你不想增加类似的计数,也不想在数组中使用投票。我很肯定,我已经向你指出,它已经非常详细地说明了为什么会出现这种情况,并且是有意的。也许你应该展示一个你必须修改的文档,你正在发送的数据以及你期望发生的事情。所以你要么传递了错误的信息,要么它正在做它应该做的事情。@NeilLunn是的,通过那篇文章学到了很多,谢谢。它完全有效。我只是想让错误信息更清楚。我的意思是,在应用程序级别自定义错误。:)然后在你的问题中加入更多细节,就像你被要求的那样!如果您不理解“为什么?”,请包括一个示例文档和您正在发送的更新参数。然后,我非常乐意进一步解释在这种情况下发生了什么。现在你的问题没有告诉我们什么。这就是为什么它没有答案。如果需要帮助,请提供数据。请。@NeilLunn抱歉耽搁了,更新问题,现在应该更清楚了:)