Mongodb 如果新元素不存在,则更新文档数组字段

Mongodb 如果新元素不存在,则更新文档数组字段,mongodb,mongoose,Mongodb,Mongoose,我需要找到用户文档(按usename),然后将新任务推送到任务数组中——如果它在数组中不存在的话 我找到了这个解决方案: var userSchema = mongoose.Schema({ username: { type: String}, email: String, password: String, tasks: [String] }); 但是我怎么知道更新没有发生的原因呢 是因为用户名不存在还是因为任务已经存在?$push将在任务数组中创建重复项。您

我需要找到用户文档(按usename),然后将新任务推送到任务数组中——如果它在数组中不存在的话

我找到了这个解决方案:

var userSchema = mongoose.Schema({
    username: { type: String},
    email: String,
    password: String,
    tasks: [String]
});
但是我怎么知道更新没有发生的原因呢


是因为用户名不存在还是因为任务已经存在?

$push将在任务数组中创建重复项。您需要使用运算符:

user = await User.findOneAndUpdate(
      { username: username, 'tasks': { $ne: task} },
      { $push: { tasks: task } },{ 'upsert': false});

$push将在任务数组中创建重复项。您需要使用运算符:

user = await User.findOneAndUpdate(
      { username: username, 'tasks': { $ne: task} },
      { $push: { tasks: task } },{ 'upsert': false});

好的,但是如果更新不起作用,您如何判断这是因为用户名不正确,还是数组中已经存在此任务?为此,我认为您必须首先检索用户文档->执行任何检查->使用replaceOne将其保存回db。因为mongodb在更新完成时不会将此类数据返回给客户端。好的,但是如果更新不起作用,您如何判断这是因为用户名不正确还是数组中已经存在此任务?为此,我认为您必须首先检索用户文档->执行任何检查->使用replaceOne将其保存回数据库。因为mongodb在更新完成时不会将此类数据返回给客户端。