只能在Model.getById上进行文档更新?

时间:2017-07-22 14:29:59

标签: couchbase-ottoman ottoman-node

如果我通过除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 个答案:

答案 0 :(得分:0)

在我看来,该用户是数组类型。您可以尝试下面的代码来检查仅保存第一个找到的用户。

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"});
    });
});