是否可以使用javascript SDK从amazon Dynamodb查询JSON数据

是否可以使用javascript SDK从amazon Dynamodb查询JSON数据,javascript,json,amazon-web-services,amazon-dynamodb,aws-sdk-js,Javascript,Json,Amazon Web Services,Amazon Dynamodb,Aws Sdk Js,我需要亚马逊迪纳摩的帮助。我期待在dynamodb的特别查询 我的JSON如下所示 { blocknumber: '20', BusinessData: { BASE_UNIT: 'kg', FARMERID: 'FAINKABR0001', FARMLOCATION: 'Farm 3927', GAPINFO: {}, PLANTINGDATE: '2020-11-02T18:30:00.000Z', PRODUCEQUANTITES:

我需要亚马逊迪纳摩的帮助。我期待在dynamodb的特别查询

我的JSON如下所示

{
  blocknumber: '20',
  BusinessData: {
    BASE_UNIT: 'kg',
    FARMERID: 'FAINKABR0001',
    FARMLOCATION: 'Farm 3927',
    GAPINFO: {},
    PLANTINGDATE: '2020-11-02T18:30:00.000Z',
    PRODUCEQUANTITES: [
      {
        name: 'Priya',
        qty: 200
      }
    ],
    SELECTED_UNIT: {
      NAME: 'kg'
    }
  },
  chaincodeID: 'producechaincode',
  docType: 'Produce',
  PRID: 'PRFAINKABR0007',
  PRODUCE: 'Sweetcorn',
  STATUS: 'Approved',
  timestamp: '2020-12-06T13:03:08.857Z'
}
我想查询FARMERID为“FAINKABR0001”的所有数据(产品)。 我浏览了所有的示例,但似乎我只能查询哈希键、排序键和使用GSI。 我们可以使用AWS的Javascript SDK进行查询吗


提前感谢

DynamoDB中的
查询
操作根据主键值查找项目。您可以查询具有复合主键(分区键和排序键)的任何表或辅助索引(
GSI

现在,对于您的问题,您有两个选择:
选项1

  • FARMERID
    作为您的GSI
选项2

  • 使用
    Scan
    方法并过滤结果
现在,您需要根据需要进行成本评估。每种方法都有其优缺点

PFB一些参考资料:

根据评论,一种方法可能是

var数据=
[
{
区块编号:“20”,
业务数据:{
基本单位:千克,
FARMERID:“FAINKABR0001”,
农场位置:“3927农场”,
加平福:{},
种植日期:“2020-11-02T18:30:00.000Z”,
产品数量:[
{
姓名:“Priya”,
数量:200
}
],
所选单位:{
名称:“kg”
}
},
chaincodeID:“producechaincode”,
docType:'product',
PRID:'PRFAINKABR0007',
生产‘甜玉米’,
状态:“已批准”,
时间戳:“2020-12-06T13:03:08.857Z”
},
{
区块编号:“20”,
业务数据:{
基本单位:千克,
FARMERID:“FAINKABR0002”,
农场位置:“3927农场”,
加平福:{},
种植日期:“2020-11-02T18:30:00.000Z”,
产品数量:[
{
姓名:“Priya”,
数量:200
}
],
所选单位:{
名称:“kg”
}
},
chaincodeID:“producechaincode”,
docType:'product',
PRID:'PRFAINKABR0007',
生产‘甜玉米’,
状态:“已批准”,
时间戳:“2020-12-06T13:03:08.857Z”
},
{
区块编号:“20”,
业务数据:{
基本单位:千克,
FARMERID:“FAINKABR0001”,
农场位置:“3927农场”,
加平福:{},
种植日期:“2020-11-02T18:30:00.000Z”,
产品数量:[
{
姓名:“Priya”,
数量:200
}
],
所选单位:{
名称:“kg”
}
},
chaincodeID:“producechaincode”,
docType:'product',
PRID:'PRFAINKABR0007',
生产‘甜玉米’,
状态:“已批准”,
时间戳:“2020-12-06T13:03:08.857Z”
}
];
函数filterResponse(数据,id){
对于(变量i=0;i
DynamoDB中的
查询
操作根据主键值查找项目。您可以查询具有复合主键(分区键和排序键)的任何表或辅助索引(
GSI

现在,对于您的问题,您有两个选择:
选项1

  • FARMERID
    作为您的GSI
选项2

  • 使用
    Scan
    方法并过滤结果
现在,您需要根据需要进行成本评估。每种方法都有其优缺点

PFB一些参考资料:

根据评论,一种方法可能是

var数据=
[
{
区块编号:“20”,
业务数据:{
基本单位:千克,
FARMERID:“FAINKABR0001”,
农场位置:“3927农场”,
加平福:{},
种植日期:“2020-11-02T18:30:00.000Z”,
产品数量:[
{
姓名:“Priya”,
数量:200
}
],
所选单位:{
名称:“kg”
}
},
chaincodeID:“producechaincode”,
docType:'product',
PRID:'PRFAINKABR0007',
生产‘甜玉米’,
状态:“已批准”,
时间戳:“2020-12-06T13:03:08.857Z”
},
{
区块编号:“20”,
业务数据:{
基本单位:千克,
FARMERID:“FAINKABR0002”,
农场位置:“3927农场”,
加平福:{},
种植日期:“2020-11-02T18:30:00.000Z”,
产品数量:[
{
姓名:“Priya”,
数量:200
}
],
所选单位:{
名称:“kg”
}
},
chaincodeID:“producechaincode”,
docType:'product',
PRID:'PRFAINKABR0007',
生产‘甜玉米’,
状态:“已批准”,
时间戳:“2020-12-06T13:03:08.857Z”
},
{
区块编号:“20”,
业务数据:{
基本单位:千克,
FARMERID:“FAINKABR0001”,
农场位置:“3927农场”,
加平福:{},
种植日期:“2020-11-02T18:30:00.000Z”,
产品数量:[
{
姓名:“Priya”,
数量:200
}
],
所选单位:{
名称:“kg”
}
},
chaincodeID:“producechaincode”,
docType:'product',
PRID:'PRFAINKABR0007',
生产‘甜玉米’,
状态:“已批准”,
时间戳:“2020-12-06T13:03:08.857Z”
}
];
函数filterResponse(数据,id){
对于(变量i=0;i
谢谢@Atul Kumar的帮助我还添加了我的全部代码我的未来可能会有人面临同样的问题 这里的filtereexpression为
filtereexpression:“BusinessData.FARMERID=:farmeridvalue”

这里我们需要给FilterExpression值指定我们要查询的属性,即
BusinessData.FARMERID
,并给一个名称作为我给的
farmeridvalue
,现在您已经将
ExpressionAttributeValue
设置为我的搜索值作为
FAINKABR0001

请参见下面的整个扫描代码

var params = {
    TableName: "Your_tableName",
    FilterExpression: "BusinessData.FARMERID = :farmeridvalue",
    ExpressionAttributeValues: {
        ":farmeridvalue" :"FAINKABR0001"

    }
};

docClient.scan(params, onScan);

function onScan(err, data) {
    if (err) {
        console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        // print all the movies
        console.log("Scan succeeded.", data);
        data.Items.forEach(function(Block) {
           console.log( "result",
                Block.docType + ": ",
                Block.timestamp, "- rating:",  Block.BusinessData.FARMERID);
        });

        // continue scanning if we have more movies, because
        // scan can retrieve a maximum of 1MB of data
        if (typeof data.LastEvaluatedKey != "undefined") {
            console.log("Scanning for more...");
            params.ExclusiveStartKey = data.LastEvaluatedKey;
            docClient.scan(params, onScan);
        }
    }
}

谢谢@Atul Kumar的帮助,我也添加了我的全部代码,我的未来可能会有人面临同样的问题 这里的filtereexpression为
filtereexpression:“BusinessData.FARMERID=:farmeridvalue”

这里是w