บทนี้เป็นการนำเสนอถึงวิธีการแสดงนิพจน์ข้อมูล JSON ของ MongoDB ใน Golang โดย MongoDB นั้นข้อมูลและเงื่อนไขในคำค้นถูกบรรยายด้วยโครงสร้าง JSON เราจะเรียนรู้ว่าเราสามารถแสดงโครงสร้าง JSON เช่นนี้ได้ในภาษา Go อย่างไร

แพ็คเกจ bson

ไดรเวอร์ภาษา Go ที่เป็นทางการจาก MongoDB มีแพ็คเกจ bson ซึ่งรวมถึงโครงสร้างข้อมูลหลายตัวสำหรับการบรรยายข้อมูล JSON

แพ็คเกจ bson: go.mongodb.org/mongo-driver/bson

ประเภท bson.D ใช้ในการบรรยายอาร์เรย์ลำดับคีย์-ค่า ซึ่งมักถูกใช้เพื่อแสดงนิพจน์คำค้น MongoDB และข้อมูล JSON

นิยาม:

// อาร์เรย์คีย์-ค่า
type D [] E

// โครงสร้างคีย์-ค่า
type E struct {
	Key   string
	Value interface{}
}

ตัวอย่างของนิพจน์คำค้น:

bson.D{{"qty", bson.D{{"$lt", 30}}}}

นิพจน์เทียบเท่า:

{"qty": {"$lt": 30}}

ตัวอย่างข้อมูลเอกสาร:

bson.D{
	{"item", "journal"},
	{"qty", 25},
	{"size", bson.D{
		{"h", 14},
		{"w", 21},
		{"uom", "cm"},
	}},
	{"status", "A"},
}

JSON เทียบเท่า:

{
	"item": "journal",
	"qty": 25,
	"size": {
		"h": 14,
		"w": 21,
		"uom": "cm"
	},
	"status": "A"
}

bson.A ใช้ในการกำหนดอาร์เรย์ JSON

นิยามของอาร์เรย์ JSON:

type A []interface{}

ตัวอย่าง 1:

bson.A{"bar", "world", 3.14159, bson.D{{"qux", 12345}}}

JSON เทียบเท่า:

["bar", "world", 3.14159, {"qux": 12345}]

ตัวอย่าง 2:

bson.A{"A", "D"}

JSON เทียบเท่า:

["A", "D"]

bson.M ใช้ในการบรรยายคีย์-ค่าที่ไม่เรียงลำดับ ต่างจาก bson.D ซึ่งสนใจเกี่ยวกับลำดับการเก็บของคีย์

นิยาม:

type M map[string]interface{}

ตัวอย่าง:

bson.M{"foo": "bar", "hello": "world", "pi": 3.14159}

JSON เทียบเท่า:

{
	"foo": "bar",
	"hello": "world",
	"pi": 3.14159
}