मेरा प्रश्न सरल हो सकता है, यहाँ इसका कुछ और संदर्भ है। मेरे पास एक MySQL DB है, मैंने एक MongoDB को पॉप्युलेट करने के लिए एक ETL टूल का उपयोग किया है, हालांकि मैं इसके लिए उचित ObjectId संदर्भ बनाने का प्रबंधन नहीं कर सका (मैं केवल एक स्ट्रिंग प्राप्त कर सकता हूं) ऑब्जेक्ट आईडी का।

अब तक मुझे एक विचार आया है (शायद पागल लेकिन फिर भी .. काम कर सकता है)

मुझे इस क्षेत्र को एक दस्तावेज़ में इस तरह से आबाद किया गया है:

"field1" : "ObjectId('5d48845c456145ee9d1ccffde')",

मैं mongoDB के माध्यम से जो हासिल करना चाहता हूं वह प्राप्त करने के लिए पहले और आखिरी चार को हटा रहा है (डबल कोट्स को अलग करना):

"field1" : ObjectId('5d48845c456145ee9d1ccffde'),

(ध्यान दें कि परिवर्तन के बाद मोंगोडीबी स्वचालित रूप से सरल को डबल कोट में परिवर्तित कर देता है, इसलिए मेरा संदर्भ सही हो जाता है)।

समस्या यह है कि, मुझे इसे प्राप्त करने के लिए मोंगोडीबी के लिए किसी प्रकार की अद्यतन स्क्रिप्ट के करीब कुछ भी नहीं मिला है।

क्या इसे करने का कोई तरीका है ?

NodeJS का उपयोग करना काम कर सकता है, हालांकि, इस स्थिति में दस्तावेज़ को क्वेरी करना फ़ील्ड 1 को वापस नहीं करता है (शायद यह इसे गलत लगता है) ...

0
nathan bersez 6 अगस्त 2019, 18:07

1 उत्तर

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

यदि इसका एक बार अद्यतन किया जाता है, तो आप निम्न क्वेरी का उपयोग कर सकते हैं:

db.COLLECTION.aggregate([
    {
        $addFields:{
            "field1":{
                $toObjectId:{
                    $substrBytes:[
                        "$field1",
                        10,
                        24
                    ]
                }
            }
        }
    },
    {
        $out:"COLLECTION"
    }   
])

एकत्रीकरण में, 'फ़ील्ड 1' को ऑब्जेक्ट आईडी में डाला जाता है। बाद में, संग्रह में पुराने डेटा को एकत्रित डेटा से बदल दिया जाता है।

2
Himanshu Sharma 6 अगस्त 2019, 20:25