การแทรกเอกสาร JSON ด้วย "." ในคีย์ไปยัง MongoDB


14

ประการแรกนี่เป็นคำถามการออกแบบมากกว่าคำถามการเขียนโปรแกรม

ฉันกำลังสร้างแอปพลิเคชันที่ฉันต้องดึงข้อมูล JSON ที่มีอยู่และใส่ลงใน MongoDB ฉันพบว่าเอกสาร JSON บางฉบับมีจุด.ในคีย์ของพวกเขา ฉันอ่านในเอกสาร MongoDB ที่.ไม่อนุญาตให้ใช้เครื่องหมายมหัพภาคเป็นคีย์ใน MongoDB ตามที่ใช้ในการสืบค้น

ฉันไม่ได้ทำการแทรกจำนวนมากในเว็บแอปพลิเคชันมันเป็นการแทรกครั้งเดียว นอกจากนี้ฉันส่วนใหญ่จะดึงเอกสารทั้งหมดแทนที่จะสืบค้นบางส่วนของเอกสารเพราะฉันต้องการรับข้อมูลทั้งหมด

ดังนั้นเมื่อพิจารณาความต้องการของฉันฉันมีสองตัวเลือกในการจัดเก็บเอกสาร JSON:

  1. ค้นหา JSON สำหรับช่วงเวลาในคีย์และหลบหนีจากนั้นใส่ลงใน MongoDB
  2. แปลง JSON ทั้งหมดให้อยู่ในรูปแบบ BSONและเก็บไว้เพื่อหลีกเลี่ยงความจำเป็นในการหลบหนีและแยกวิเคราะห์ JSON ด้วยตนเองเมื่อจำเป็นนอก MongoDB

คุณช่วยบอกฉันได้ไหมว่าอะไรจะเป็นการออกแบบที่ดีกว่าเพราะฉันไม่สามารถหาข้อสรุปได้


วิธีหนึ่งในการแก้ไขปัญหานี้คือการใช้วิธีการแทรกและตั้งค่าพารามิเตอร์ check_keys เป็นเท็จ อีกวิธีหนึ่งคือการอ่านเอกสารของคุณและแทนที่จุดที่ถูกสาปด้วยสิ่งอื่นหรืออักขระยูนิโค้ดที่เทียบเท่ากัน (ตัวอักษร)
โนอาห์

คำตอบ:


3

มีทางเลือกไม่กี่:

1. แทนที่จุดด้วยเส้นประ

นี่จะเป็นวิธีที่ฉันชอบเพราะมันทำให้โครงสร้างชัดเจนเพียงพอ

เนื่องจากตามที่คุณพูด“ มันเป็นการแทรกครั้งเดียวค่อนข้างมาก” มันควรจะค่อนข้างง่ายในการตรวจสอบว่ามันไม่แตกหักหรือไม่ สำหรับสถานการณ์อื่น ๆ การตรวจสอบเหล่านั้นโดยทางโปรแกรมต้องเขียนโค้ดบางส่วน แต่ก็ยังเป็นงานที่ค่อนข้างง่าย

2. เปลี่ยนจุดโดยอักขระ Unicode จุดเช่น U

ฉันจะขอให้คำแนะนำกับวิธีนี้เพราะมันจะนำไปสู่อาการปวดหัวแก้จุดบกพร่องขนาดใหญ่ลงไปที่ถนน การปล่อยให้ใครบางคนที่ใช้ JSON ที่เป็นผลลัพธ์ในที่ใดที่หนึ่งในรหัสอยู่ไกลจาก MongoDB เพื่อเดาว่าจุดนั้นไม่ใช่จุดจริง ๆ เป็นวิธีที่ดีที่จะเสียเวลาไปหลายสัปดาห์อย่างแท้จริง รักษาเทคนิค Unicode เช่นนี้ไว้กับแฮ็กเกอร์ที่ต้องการหลอกใครบางคนให้คิดว่าตัวละครนั้นแตกต่างกัน

3. ใช้ BSON

เนื่องจากคุณอ้างว่าคุณ“ส่วนใหญ่จะเรียกเอกสารทั้งหมดมากกว่าการสอบถามสำหรับชิ้นส่วนของมัน” วิธีการนี้ไม่ได้มีข้อบกพร่องที่สำคัญในกรณีของคุณ แม้ว่าคุณจะพูดว่า "ส่วนใหญ่" ซึ่งหมายความว่าบางครั้งคุณจะดึงเฉพาะบางส่วนของเอกสาร

โดยทั่วไปข้อเสียเปรียบคือคุณจะไม่สามารถค้นหาเอกสารหรือโหลดเพียงบางส่วน

4. ใช้การเข้ารหัสมาตรฐานเช่น Base64

การแปลงคีย์ที่มีปัญหา (หรือปุ่มทั้งหมดขึ้นอยู่กับอัตราส่วนระหว่างปุ่มที่มีปัญหาและไม่ใช่ปัญหา) ไปที่ Base64 หรือเลขฐานสิบหกอาจเป็นโซลูชันที่ทำงานได้โดยมีข้อดีค่อนข้างชัดเจน: นักพัฒนาส่วนใหญ่จะรู้จัก Base64 หรือค่าเลขฐานสิบหก .

ข้อเสียเปรียบคือหน่วยความจำที่เพิ่มขึ้นเช่นเดียวกับความจำเป็นในการเข้ารหัสและถอดรหัสคีย์เมื่อใช้พวกเขา

5. ชุดการcheck_keysfalse

ฉันขอแนะนำอย่างยิ่งต่อวิธีการนี้เนื่องจากจะทำให้แบบสอบถามข้อมูลคลุมเครือและใช้เวลาหลายชั่วโมงหรือหลายวันในการหาสาเหตุที่ข้อความค้นหาบางคำถามไม่ได้ทำในสิ่งที่คุณคิดว่าควรจะทำ Dot เป็นตัวละครที่สงวนไว้และการตรวจสอบอยู่ที่นี่เพื่อปกป้องคุณ โดยบอก MongoDB ให้ข้ามการตรวจสอบคุณจะเลื่อนช่วงเวลาที่คุณจะต้องจัดการกับความขัดแย้งระหว่างไวยากรณ์ของ MongoDB และอักขระที่สงวนไว้ซึ่งใช้ในคีย์


0

เพียงใช้ BSON จากนั้นคุณมีรูปแบบเอกสารที่ดีพร้อมการสนับสนุนห้องสมุดที่ผ่านการทดสอบเป็นอย่างดีและที่สำคัญที่สุดคุณสามารถกลับด้านได้ (เข้ารหัส / ถอดรหัส) โดยไม่มีการสูญเสีย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.