5

Tôi đang sử dụng nodeJS SDK để đưa món hàng để dynamoDB, Mục là:Làm thế nào để trả lại hàng lắp vào dynamoDB

{ 
    "eventId": date + '-' + eventName + '-' + eventPurpose, 
    "eventName": eventName, 
    "eventPurpose": eventPurpose, 
    "eventDates": eventDates, 
    "attendees": attendees 
} 

Mã hiện nay cho đặt các mục trong dynamoDB:

const params = { 
    TableName: "event", 
    Item: { 
     "eventId": date + '-' + eventName + '-' + eventPurpose, 
     "eventName": eventName, 
     "eventPurpose": eventPurpose, 
     "eventDates": eventDates, 
     "attendees": attendees 
    }, 
    ReturnValues: "ALL_OLD" 
    }; 

    dynamo.put(params, (err, data) => { 
    console.log("coming here"); 
    if (err) { 
     console.log("error : " + JSON.stringify(err)); 
    } 
    console.log("data" + JSON.stringify(data)); 
    cb(null, data); 
    }); 

Việc chèn diễn ra chính xác và giá trị trả về là một đối tượng trống.

Tôi muốn trả lại mục được chèn. Tôi đã tìm thấy số này doc. Nhưng điều này chỉ trả về trong trường hợp cập nhật giá trị cũ. Tôi không thể tìm thấy bất kỳ thông tin hữu ích nào khác ngoài thông tin này.

Có công việc nào xung quanh hoặc chúng tôi chỉ cần truy cập truy vấn bằng cách sử dụng phương thức nhận bằng khóa chính?

+0

Lưu ý trong hàm gọi lại nếu bạn nhận được 'err', bạn chắc chắn không nên gọi lambda' callback' như thể nó đã thành công. Một khối 'if/else' thông thường sẽ giúp loại bỏ sự nhầm lẫn trong tương lai! –

Trả lời

5

Các liên kết mà bạn đăng là, thật đáng buồn, câu trả lời thực sự duy nhất vào thời điểm này (API Version 2012-08-10). PutItem có thể trả lại các mục ngay trước khi chúng được cập nhật hoặc không có gì cả.

Thông số ReturnValues được một số thao tác DynamoDB sử dụng; tuy nhiên, PutItem không nhận ra bất kỳ giá trị nào khác ngoài NONE hoặc ALL_OLD.

Nói tóm lại, cách duy nhất đáng tin cậy để lấy đối tượng chèn của bạn là để GetItem, cũng giống như bạn đoán.

2

Lưu ý rằng đây là mục bạn đang chèn, mà bạn đã có quyền truy cập vào:

{ 
    "eventId": date + '-' + eventName + '-' + eventPurpose, 
    "eventName": eventName, 
    "eventPurpose": eventPurpose, 
    "eventDates": eventDates, 
    "attendees": attendees 
} 

Bạn chỉ có thể thay đổi mã của bạn để điều này, và sau đó bạn sẽ có mục chèn trong biến item đã:

var item = { 
     "eventId": date + '-' + eventName + '-' + eventPurpose, 
     "eventName": eventName, 
     "eventPurpose": eventPurpose, 
     "eventDates": eventDates, 
     "attendees": attendees 
    }; 

const params = { 
    TableName: "event", 
    Item: item, 
    ReturnValues: "ALL_OLD" 
    }; 

bạn dường như bối rối về những gì bạn đang chèn, bởi vì bạn bắt đầu câu hỏi của bạn bằng cách hiển thị một đối tượng bạn nói rằng bạn đang chèn, nhưng mã bạn được đăng được chèn một đối tượng hơi khác nhau .

+0

ya bạn là chính xác. Đoạn mã đầu tiên chứa nội dung yêu cầu. Bằng cách nào đó, tôi đã bối rối và làm cho nó có đối tượng. Đến với câu hỏi, giải pháp của bạn là một giải pháp tốt nhưng thường trong mongoDB, nó trả về đối tượng được chèn và tôi nghĩ có thể có một cái gì đó tương tự trong dynamoDB. ** Trả về giá trị: "ALL_NEW" ** chỉ được phép trong các hoạt động cập nhật. Chỉ trong ** ** hoạt động ** KHÔNG ** hoặc ** ALL_OLD **. Cảm ơn vì sớm phản hồi. Tôi sẽ làm theo như bạn đã nói. Cách tiếp cận đơn giản và thanh lịch. Cảm ơn đánh dấu !! –

5

Chỉ cần vượt qua params.Item trong callback:

dynamo.put(params, (err, data) => { 
     if (err) { 
      cb(err); 
     } 
     cb(null, params.Item); 
     }); 

Vượt qua err trong callback quá;)

+0

Bạn đã ở đâu cả đời – booky99

+0

không phải là gian lận? ... Ý tôi là tôi muốn dữ liệu thực được chèn vào db, phải không? – MeBNoah

+0

Loại. Nó phụ thuộc vào những gì bạn muốn trả về: đối tượng mà bạn muốn lưu trữ trên cơ sở dữ liệu hoặc đối tượng được lưu trữ thực tế. – Sigma

Các vấn đề liên quan