Обновление документа возможно только на Model.getById?
Я не могу обновить документ, если я получаю его через пользовательский индекс, отличный от Model.getById:
let UserModel = ottoman.model("User", {
createdON: {type: "Date", default:function(){return new Date()}},
name: {
first: "string",
last: "string"
},
address: {
street: "string",
city: "string",
state: "string",
zip: "integer",
country: {type: "string", default: "Somewhere"}
},
phone: "string",
email: "string",
email_verified: {type: "boolean", default: false},
password: "string",
active: {type: "boolean", default: true}
}, {
index: {
findByEmail: {
by: "email",
type: "refdoc"
},
findByLastName: {
by: "name.last",
type: "n1ql"
}
}
});
ottoman.ensureIndices((error) => {
if (error) {
return console.error("Error ensuring indices on User", error);
}
//console.log("Ensured indices on User");
});
Это отлично работает:
await UserModel.getById(request.params.token, (error, user) => {
if (error) {
console.error('UserController getById error: ', error);
return response.status(400).send({"status": "error", "message": "User not found"});
}
// Set verification flag
user.email_verified = true;
// Persist user document
user.save((error, result) => {
if (error) {
console.log('Error updating user: ', error);
throw new Error(error);
}
console.log('Updated user: ', user._id);
response.status(200).send({"status": user, "message": "Email verified"});
});
});
Это не:
await UserModel.find({email: 'tester@testing.com'}, (error, user) => {
if (error) {
console.error('UserController getById error: ', error);
return response.status(400).send({"status": "error", "message": "User not found"});
}
// Set verification flag
user.active = true;
// Persist user document
user.save((error, result) => {
if (error) {
console.log('Error updating user: ', error);
throw new Error(error);
}
console.log('Updated user: ', user._id);
response.status(200).send({"status": user, "message": "Email verified"});
});
});
Ошибка:
TypeError: user.save is not a function
at UserModel.find (/Users/something/something/something/something/something/something.js:291:22)
at handler (/Users/something/something/something/node_modules/ottoman/lib/ottoman.js:626:9)
at loadSubItem (/Users/something/something/something/node_modules/ottoman/lib/modelinstance.js:587:7)
at /Users/something/something/something/node_modules/ottoman/lib/modelinstance.js:635:9
at /Users/something/something/something/node_modules/ottoman/lib/cbstoreadapter.js:77:5
Я делаю что-то не так при обновлении пользователя? Я пробовал это с несколькими типами документов / моделей, и это тот же результат.
1 ответ
Мне кажется, что пользователь является типом массива. Вы можете попробовать код ниже, чтобы проверить сохранение только первого найденного пользователя.
await UserModel.find({email: 'tester@testing.com'}, (error, user) => {
if (error) {
console.error('UserController getById error: ', error);
return response.status(400).send({"status": "error", "message": "User not found"});
}
// Set verification flag
user[0].active = true;
// Persist user document
user[0].save((error, result) => {
if (error) {
console.log('Error updating user: ', error);
throw new Error(error);
}
console.log('Updated user: ', user._id);
response.status(200).send({"status": user, "message": "Email verified"});
});
});