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


var userSchema = mongoose.Schema({
username: { type: String},
email: String,
password: String,
tasks: [String]
});

我需要找到用户文档(使用名称(,然后将一个新任务推送到tasks数组中——如果它在数组中还不存在的话。

我找到了这个解决方案:

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

但是我怎么能知道更新没有发生的原因呢?

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

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

db.collection.findOneAndUpdate(
{
username: 'test'
},
{
$addToSet: {
tasks: 'task'
}
},
{
returnNewDocument: true
})

最新更新