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