Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法找出为什么mongoose或mongoDB中的更新结果为0?_Javascript_Mongodb_Mongoose - Fatal编程技术网

Javascript 有没有办法找出为什么mongoose或mongoDB中的更新结果为0?

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 },

我在mongoose中有一个线程模型,它当然有一个
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抱歉耽搁了,更新问题,现在应该更清楚了:)