【问题标题】:DynamoDB - Get is not workingDynamoDB - 获取不工作
【发布时间】:2016-01-16 11:28:03
【问题描述】:

我正在使用一个名为 dynamoose 的库来访问 dynamoDB。

https://github.com/automategreen/dynamoose

我已经定义了一个模型:

var App = dynamoose.model('AppTest', new dynamoose.Schema ({
   appID: { type: String, hashkey: true },
   email: String,
   isMaster: Boolean,
   password: String
}));

当我执行保存操作时,一切正常,数据保存到 db。

    var app = new App({ 
       appID: user.appID, 
       email: user.email,     
       isMaster: false, 
       password: user.pwd 
    });

    app.save(function (err) {
       // Data is saved, and no error here
    });

然后当我尝试获取我保存的数据时,也没有错误,但是用户未定义,虽然它存在于数据库中:

    App.get({ email: 'some_existing_email' }, function (err, user) {
       // err = null, user = undefined

    });

【问题讨论】:

    标签: node.js amazon-web-services amazon-dynamodb


    【解决方案1】:

    问题在于您如何访问 DynamoDB 中的记录。

    ‘get’只能用于主表键。在本例中为 appID。

    App.get({appID: 'abc'})
    

    对于您而言,由于电子邮件只是一个普通字段,因此您必须使用“扫描”。

    App.scan('email').eq('user@example.com').exec()
    

    如果您将电子邮件定义为范围键,则可以将“get”与 appID 和电子邮件一起使用

    var App = dynamoose.model('AppTest', new dynamoose.Schema ({
       appID: { type: String, hashkey: true },
       email: { type: String, rangeKey: true },
       isMaster: Boolean,
       password: String
    }));
    
    App.get({appID: 'abc', email: 'user@example.com'})
    

    如果电子邮件被定义为全局索引,您可以使用“查询”。

    var App = dynamoose.model('AppTest', new dynamoose.Schema ({
       appID: { type: String, hashkey: true },
       email: { type: String, index: { global: true }},
       isMaster: Boolean,
       password: String
    }));
    
    App.query('email').eq('user@example.com').exec()
    

    请注意,查询和扫描都返回数组。

    【讨论】:

      【解决方案2】:

      在 DynamoDB 中,您可以通过其主键获取项目。在您的示例中,主键是appId。您正在尝试使用电子邮件地址获取数据。您需要使用appId 更改此项以获取项目。

      如果您需要通过email 获取项目,那么您应该创建一个使用电子邮件地址作为哈希键的二级索引。然后就可以通过查询二级索引,通过邮件地址获取数据了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-10
        • 1970-01-01
        • 2017-09-22
        • 2014-02-01
        • 2018-05-28
        • 1970-01-01
        相关资源
        最近更新 更多