मैं एक DynamoDB तालिका के साथ बातचीत करने के लिए NodeJS के लिए aws-sdk का उपयोग कर रहा हूँ। DynamoDB पर यह मेरी पहली नज़र है।

getItem() या updateItem() जैसे कॉल का उपयोग करते समय, डेटा संरचना में प्रकार शामिल होते हैं, जैसे:

{
  'a': { S: 'My string' }
}

क्या इन वस्तुओं को बिना किसी प्रकार के पास करने और प्राप्त करने का कोई तरीका है ..? इसलिए...

{
  'a': 'My string'
}

या, पहले से लिखे गए किसी भी सहायक कार्य जो वस्तुओं को इस प्रारूप से और में परिवर्तित कर देगा ..?

const data = dbToObj({ 'a': { S: 'My string' } })
// { 'a': 'My string' }

इसलिए कॉल पैरा को पॉप्युलेट करते समय मैं इसे रूपांतरित कर सकता था, और डेटा प्राप्त करते समय इसे परिवर्तित कर सकता था।

मेरे डेटा तक पहुँचने से बचने की कोशिश कर रहा है जैसे:

const myData = data.Item.something.M.somethinElse.M.qwerty.S

मुझे पता है कि मैं खुद कुछ लिख सकता हूं, बस सोच रहा हूं कि क्या कोई पहले से उपलब्ध कार्यों/विकल्पों के बारे में जानता है जो ऐसा करेगा। मुझे कोई नहीं मिला।

13
Stephen Last 6 पद 2017, 16:49

4 जवाब

सबसे बढ़िया उत्तर

यह मिला:

ठीक वही जो मेरे द्वारा खोजा जा रहा था।

इंस्टॉल करें: npm i dynamodb-data-types

wrap({ 'a': 'My string' }) और unwrap({ 'a': { S: 'My string' } }) विधियाँ प्रदान करता है जिससे सादे वस्तुओं में और से रूपांतरण किया जा सके।

अपडेट करें

मुझे अब यह भी मिल गया है: AWS.DynamoDB.DocumentClient, जो aws-sdk का हिस्सा है।

दस्तावेज़ क्लाइंट विशेषता मानों की धारणा को दूर करके Amazon DynamoDB में आइटम के साथ काम करना आसान बनाता है। यह अमूर्तता इनपुट पैरामीटर के रूप में आपूर्ति किए गए देशी जावास्क्रिप्ट प्रकारों को एनोटेट करती है, साथ ही एनोटेट प्रतिक्रिया डेटा को मूल जावास्क्रिप्ट प्रकारों में परिवर्तित करती है।

अपडेट 2

इस पर Amazon द्वारा अपने awslabs github पेज के तहत काम किया जा रहा है:

Amazon DynamoDB Automarshaller

यह पुस्तकालय एक मार्शलर वर्ग प्रदान करता है जो मूल जावास्क्रिप्ट मानों को डायनेमोडीबी एट्रीब्यूट वैल्यू में परिवर्तित करता है और फिर से वापस आता है। इसे ES6 सुविधाओं जैसे सेट, मैप्स और पुनरावृत्तियों के साथ काम करने के लिए डिज़ाइन किया गया है, और इसे केवल जावास्क्रिप्ट (जैसे खाली बाइनरी बफ़र्स) या Amazon DynamoDB (जैसे कि मनमाने आकार की संख्या) द्वारा समर्थित डेटा प्रकारों का समर्थन करने के लिए कॉन्फ़िगर किया जा सकता है, जिसमें न्यूनतम ट्रेडऑफ़ हैं।

यह उनके DynamoDB DataMapper For JavaScript पैकेज का हिस्सा है।

12
Stephen Last 6 पद 2017, 20:05
हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, उत्तर के आवश्यक भागों को यहां शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर केवल-लिंक वाले उत्तर अमान्य हो सकते हैं। - समीक्षा से
 – 
David Lavender
6 पद 2017, 17:31
मैं सामान्य रूप से सहमत हूं और मैंने अपना उत्तर थोड़ा सा अपडेट कर दिया है। हालांकि, इस विशिष्ट मामले में मैं केवल dynamodb-data-types द्वारा प्रदान की गई विधि कॉल दोहरा रहा हूं, और इस तरह वे लिंक जितना ही परिवर्तन के अधीन हैं। मेरे पास साझा करने के लिए कोई कोड नहीं है जो dynamodb-data-types कोड नहीं है, क्योंकि मेरे प्रश्न का उत्तर सीधे इस पुस्तकालय का उपयोग करना है। सही बात..? ऐसा लगता है कि मुझे पहले से ही वोट दिया गया है! :-(
 – 
Stephen Last
6 पद 2017, 17:43

Dynogels प्रकारों के बारे में चिंता किए बिना संभालने का एक साफ तरीका प्रदान करते हैं। हम इसे उत्पादन में उपयोग करते हैं और बिना किसी समस्या के काम करते हैं।

https://github.com/clarkie/dynogels

Account.create({email: 'foo@example.com', name: 'Foo Bar', age: 21}, function (err, acc) {
  console.log('created account in DynamoDB', acc.get('email'));
});

यह डायनामोडब के लिए एक ODM (ऑब्जेक्ट डेटा मैपर) है।

आशा है कि इससे सहायता मिलेगी।

0
Kannaiyan 6 पद 2017, 19:29

Dynamoose एक और मॉडलिंग टूल है जो और भी बाहरी कोड को अमूर्त कर सकता है। जीथब यहां है। मुझे लगता है कि यह एडब्ल्यूएस दस्तावेज़ क्लाइंट के शीर्ष पर बनाया गया है, हालांकि मैंने ज्यादा खुदाई नहीं की है।

0
Justin Grant 5 नवम्बर 2018, 21:15

हम अपने उत्पादन अनुप्रयोगों के लिए टाइपस्क्रिप्ट के साथ dynamo-easy का उपयोग करते हैं। (सीधे ब्राउज़र से या लैम्ब्डा फ़ंक्शंस के अंदर)

यह जेएस से डायनेमोडीबी प्रकारों के लिए मैपिंग प्रदान करता है लेकिन अनुरोध एपीआई के लिए कुछ अच्छा अमूर्तता भी प्रदान करता है।

import { Model, PartitionKey, DynamoStore } from '@shiftcoders/dynamo-easy'

@Model()
export class Person {
  @PartitionKey()
  id: string
  name: string
  yearOfBirth: number
}

const personStore = new DynamoStore(Person)

personStore
  .scan()
  .whereAttribute('yearOfBirth').equals(1958)
  .exec()
  .then(res => console.log('ALL items with yearOfBirth == 1958', res))

पूर्ण प्रकटीकरण: मैं पुस्तकालय के लेखकों में से एक हूं

1
wittwermic 1 मार्च 2019, 19:01