Обновление документа возможно только на 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"});
    });
});
Другие вопросы по тегам