更新表达式updateExpression

主题:

  1. SET - 修改或添加项目属性
  2. REMOVE - 从项目中删除属性
  3. ADD - 更新数字和集合
  4. DELETE - 从集合中删除元素

 

  • set 修改属性

    

 case 'PUT': {
            var table = 'book_table', hash = 'book', id = "05d101be-d5e8-43ec-8eb6-5530e21af83e";
            var params = {
                TableName: table,
                Key: {
                    "hash": hash,
                    "id": id
                },
                UpdateExpression: "SET #p = :p, #sn = :n, #c = #c + :c",
                ExpressionAttributeNames: {
                    "#p": "price",
                    "#sn": "sn",
                    "#c": "count"
                },
                ExpressionAttributeValues: {
                    ":p": 100.99,
                    ":n": "100-100-010",
                    ":c": 1
                },
                ReturnValues: "UPDATED_NEW"
            };
           await docClient.update( params ).promise().then(
                ( success ) => {
                    response.body = JSON.stringify({ "success:": success })
                }
               
            ).catch(
                ( err ) => {
                    console.log(err);
                    response.statusCode = err.statusCode;
                    response.body = JSON.stringify({
                        code: err.code,
                        message: err.message
                    })
                }
            );
            callback( null, response );
            break;
        };

  程序运行成功返回如下:

{
    "success:": {
        "Attributes": {
            "count": 9,
            "price": 100.99,
            "sn": "100-100-010"
        }
    }
}
  • 添加列表和映射    

  

case 'POST': {
            var table = "book_table", hash = "book";
            var params = {
                TableName: table,
                Item: { 
                    "hash": hash,
                    "id": uuid(),
             "booktype":['青春文学', '历史典故']
              }  
            };

            await docClient.put( params ).promise().then(
                ( data ) => {
                    response.body =  JSON.stringify({"success": data})
                }
            ).catch(
                ( err ) =>{
                    response = {    
                        statusCode: err.statusCode,
                        body: JSON.stringify({
                            code: err.code,
                            message: err.message
                        })
                    }
                }
            )
             callback( null, response );
            break;
        }

    程序运行成功后返回:

{
    "success": {}
}

  

  • 将元素添加到列表:
case 'PUT': {
            var table = 'book_table', hash = 'book', id = "bee1bea0-4b6a-4fbc-8cf0-8c030519c909";

            var params = {
                TableName: table,
                Key: {
                    "hash": hash,
                    "id": id
                },

                UpdateExpression: "SET #type = list_append(#type, :t)",
                ExpressionAttributeNames: {
                    "#type": "booktype"
                },
                ExpressionAttributeValues: {
                    ":t": ["读者杂志","最小说","科技畅想"]
                },
 };
  await docClient.put( params ).promise().then(
                ( data ) => {
                    response.body =  JSON.stringify({"success": data})
                }
            ).catch(
                ( err ) =>{
                    response = {
                        statusCode: err.statusCode,
                        body: JSON.stringify({
                            code: err.code,
                            message: err.message
                        })
                    }
                }
            )
        
            callback( null, response );
            break;
        }

  

  程序运行成功后返回:

{
    "success:": {
        "Attributes": {
            "booktype": [
                "青春文学",
                "历史典故",
                "读者杂志",
                "最小说",
                "科技畅想",
              ],
            "hash": "book",
            "id": "556433cf-37b6-4e12-b513-9c261fd279f7"
        }
    }
}
  • 添加嵌套映射属性
        case 'POST': {
            var table = "book_table", hash = "book";

            var params = {
                TableName: table,
                Item: { 
                    "hash": hash,

                    "id": uuid(),
                    "type": {
                        "list1": ["武侠小说", "社科图书"],
                        "list2": ["儿童读物", "漫画书"],
                        "list3": ["法律", "经济"]
                    }

                }
              };

            await docClient.put( params ).promise().then(
                ( data ) => {
                    response.body =  JSON.stringify({"success": data})
                }
            ).catch(
                ( err ) =>{
                    response = {
                        statusCode: err.statusCode,
                        body: JSON.stringify({
                            code: err.code,
                            message: err.message
                        })
                    }
                }
            )
         
            callback( null, response );
            break;
        }

 

case 'PUT': {
            var table = 'book_table', hash = 'book', id = "bee1bea0-4b6a-4fbc-8cf0-8c030519c909";
            var params = {
                TableName: table,
                Key: {
                    "hash": hash,
                    "id": id
                },
                UpdateExpression: "SET #t.#l1 = :b1, #t.#l3 = :b3",
                ExpressionAttributeNames: {
                    "#t": "type",
                    "#l1": "list1",
                    "#l3": "list3"
                },
                ExpressionAttributeValues: {
                    ":b1": ["军事","艺术"],
                    ":b3": ["社会","科学"]
                },

                 ReturnValues: "ALL_NEW"
            };

           await docClient.update( params ).promise().then(
                ( success ) => {
                    response.body = JSON.stringify({ "success:": success })
                }
               
            ).catch(
                ( err ) => {
                    console.log(err);
                    response.statusCode = err.statusCode;
                    response.body = JSON.stringify({
                        code: err.code,
                        message: err.message
                    })
                }
            );
            callback( null, response );
            break;
        };

  程序运行成功后返回:

{
    "success:": {
        "Attributes": {
            "type": {
                "list1": [
                    "军事",
                    "艺术"
                ],
                "list3": [
                    "社会",
                    "科学"
                ],
                "list2": [
                    "儿童读物",
                    "漫画书"
                ]
            },
            "hash": "book",
            "id": "bee1bea0-4b6a-4fbc-8cf0-8c030519c909"
        }
    }
}
  • 对数值属性进行加减(对现有数值属性执行加减运算。为此,请使用 +(加号)和 -(减号)运算符。)
case 'POST': {
            var table = "book_table", hash = "book";

            var params = {
                TableName: table,

                Item: {
                    "hash": hash,
                    "id": uuid(),
                    "name": "三重门",
                    "author": "韩寒",
                    "type": "情感其他",
                    "sn": "100-100-008",
                    "price": 103.50,
                    "date": "2010-01-01",
                    "count": 7,
                    "description": "本书通过少年林雨翔的视角,向读者揭示了真实的高中生的生活,体现了学生式的思考、困惑和梦想。"
                
                }
            };
            console.log( params.Item.count );
            await docClient.put( params ).promise().then(
                ( data ) => {
                    response.body =  JSON.stringify({"success": data})
                }
            ).catch(
                ( err ) =>{
                    response = {
                        statusCode: err.statusCode,
                        body: JSON.stringify({
                            code: err.code,
                            message: err.message
                        })
                    }
                }
            )
         
            callback( null, response );
            break;
        }

  

case 'PUT': {

            var table = 'book_table', hash = 'book', id = '4b99e00f-9f57-41f7-80de-d581e8c84522';

            var params = {
                TableName: table,
                Key: {
                    "hash": hash,
                    "id": id
                },
    
                 UpdateExpression: "SET #p = :p, #sn = :n, #c = #c + :c",
                ExpressionAttributeNames: {
                    "#p": "price",
                    "#sn": "sn",
                    "#c": "count"
                },
                ExpressionAttributeValues: {
                    ":p": 100.99,
                    ":n": "100-100-010",
                    ":c": 1
                },
                ReturnValues: "ALL_NEW"
            };

           await docClient.update( params ).promise().then(
                ( success ) => {
                    response.body = JSON.stringify({ "success:": success })
                }
               
            ).catch(
                ( err ) => {
                    console.log(err);
                    response.statusCode = err.statusCode;
                    response.body = JSON.stringify({
                        code: err.code,
                        message: err.message
                    })
                }
            );
            callback( null, response );
            break;
        };

  程序运行成功后返回:

{
    "success:": {
        "Attributes": {
            "date": "2010-01-01",
            "author": "韩寒",
            "price": 99.99,
            "count": 8,
            "name": "三重门",
            "description": "本书通过少年林雨翔的视角,向读者揭示了真实的高中生的生活,体现了学生式的思考、困惑和梦想。",
            "id": "4b99e00f-9f57-41f7-80de-d581e8c84522",
            "sn": "100-100-100",
            "type": "情感其他",
            "hash": "book"
        }
    }
}
  • 将元素附加到列表
     case 'PUT': {

            var table = 'book_table', hash = 'book', id = '4b99e00f-9f57-41f7-80de-d581e8c84522';

            var params = {
                TableName: table,
                Key: {
                    "hash": hash,
                    "id": id
                },

                UpdateExpression: "SET #type = list_append(#type, :t)",
                ExpressionAttributeNames: {
                    "#type": "booktype"
                },
                ExpressionAttributeValues: {
                    ":t": ["穿越时空", "玄幻小说"]
                },
                 ReturnValues: "ALL_NEW"
            };

           await docClient.update( params ).promise().then(
                ( success ) => {
                    response.body = JSON.stringify({ "success:": success })
                }
               
            ).catch(
                ( err ) => {
                    console.log(err);
                    response.statusCode = err.statusCode;
                    response.body = JSON.stringify({
                        code: err.code,
                        message: err.message
                    })
                }
            );
            callback( null, response );
            break;
        };

  程序运行成功后返回:

{
    "success:": {
        "Attributes": {
            "booktype": [
                "青春文学",
                "历史典故",
                "读者杂志",
                "最小说",
                "科技畅想",
                 "穿越时空",
                "玄幻小说"
            ],
            "hash": "book",
            "id": "556433cf-37b6-4e12-b513-9c261fd279f7"
        }
    }
}
  • 防止覆盖现有属性(设置项目的 Price,但仅当项目还没有 Price 属性时设置。(如果 Price 已存在,则不执行任何操作。))
 case 'PUT': {

            var table = 'book_table', hash = 'book', id = '4b99e00f-9f57-41f7-80de-d581e8c84522';

            var params = {
                TableName: table,
                Key: {
                    "hash": hash,
                    "id": id
                },

               UpdateExpression: "SET price = if_not_exists(price, :p)",
                ExpressionAttributeValues: {
                    ":p": 100
                },     
            ReturnValues: "ALL_NEW"
            };

           await docClient.update( params ).promise().then(
                ( success ) => {
                    response.body = JSON.stringify({ "success:": success })
                }
               
            ).catch(
                ( err ) => {
                    console.log(err);
                    response.statusCode = err.statusCode;
                    response.body = JSON.stringify({
                        code: err.code,
                        message: err.message
                    })
                }
            );
            callback( null, response );
            break;
        };

  程序运行成功后返回:

{
    "success:": {
        "Attributes": {
            "booktype": [
                "青春文学",
                "历史典故",
                "读者杂志",
                "最小说",
                "科技畅想",
                "穿越时空",
                "玄幻小说"
            ],
            "id": "556433cf-37b6-4e12-b513-9c261fd279f7",
            "price": 100,
            "hash": "book"
        }
    }
}
  • REMOVE:从项目中删除属性(如果属性不存在,则不会执行任何操作。)

ps: DELETE不存在 "ALL_NEW"或”UPDATED_NEW“的属性

 1  case 'PUT': {
 2 
 3             var table = 'book_table', hash = 'book', id = '4b99e00f-9f57-41f7-80de-d581e8c84522';
 4 
 5             var params = {
 6                 TableName: table,
 7                 Key: {
 8                     "hash": hash,
 9                     "id": id
10                 },
11 
12                UpdateExpression: "REMOVE booktype[7]",   
13             ReturnValues: "ALL_NEW"
14             };
15 
16            await docClient.update( params ).promise().then(
17                 ( success ) => {
18                     response.body = JSON.stringify({ "success:": success })
19                 }
20                
21             ).catch(
22                 ( err ) => {
23                     console.log(err);
24                     response.statusCode = err.statusCode;
25                     response.body = JSON.stringify({
26                         code: err.code,
27                         message: err.message
28                     })
29                 }
30             );
31             callback( null, response );
32             break;
33         };

 

 

  程序运行成功后返回:

{
    "success:": {
        "Attributes": {
            "booktype": [
                "青春文学",
                "历史典故",
                "读者杂志",
                "最小说",
                "科技畅想",
                "穿越时空",
               ],
            "id": "556433cf-37b6-4e12-b513-9c261fd279f7",
            "price": 100,
            "hash": "book"
        }
    }
}

 注: ALL_NEW 将导致 DynamoDB 按更新后的情况返回项目;UPDATED_NEW仅将DynamoDB 按更新后的部分情况返回项目。

本文为原创,还望指教!

若有疑问,可在下方留言,也可自读AWS官方文档——DynamoDB: https://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html

 

posted @ 2018-10-12 21:15  曦言鸢默  阅读(383)  评论(0编辑  收藏  举报