创建集合后,它可以存储 JSON 文档。您通过将 JSON 数据结构传递给
Collection.add()
函数来存储文档。一些语言直接支持 JSON 数据,其他语言则使用等效语法来表示该数据。实现 X DevAPI 的 MySQL 连接器旨在实现对连接器特定语言原生的所有 JSON 方法的支持。
此外,在某些 MySQL 连接器中,
DbDoc
可以使用通用对象。创建它们最方便的方法是调用
Collection.newDoc()
. DbDoc
是一种表示 JSON 文档的数据类型,X DevAPI 未定义其实现方式。实现 X DevAPI 的语言可以自由地遵循带有 getter 和 setter 方法的面向对象的方法,或者使用带有公共成员的 C 结构样式。
对于严格类型的语言,可以根据集合的文档结构定义创建类文件。MySQL Shell 可用于创建这些文件。
表 5.1 不同类型的文档对象、它们支持的语言及其优势
文档对象 |
支持的语言 |
优点 |
---|---|---|
原生 JSON |
脚本语言(JavaScript、Python) |
便于使用 |
JSON 等效语法 |
C#(匿名类型、ExpandoObject) |
便于使用 |
数据库文档 |
所有语言 |
跨语言统一 |
生成的文档类 |
严格类型语言 (C#) |
使用自然 |
以下示例显示了将文档插入集合的不同方法。
MySQL 外壳 JavaScript 代码
// Create a new collection 'my_collection'
var myColl = db.createCollection('my_collection');
// Insert JSON data directly
myColl.add({_id: '8901', name: 'Mats', age: 21}).execute();
// Inserting several docs at once
myColl.add([ {_id: '8902', name: 'Lotte', age: 24},
{_id: '8903', name: 'Vera', age: 39} ]).execute();
MySQL 外壳 Python 代码
// Create a new collection 'my_collection'
var myColl = db.createCollection('my_collection');
// Insert JSON data directly
myColl.add({_id: '8901', name: 'Mats', age: 21}).execute();
// Inserting several docs at once
myColl.add([ {_id: '8902', name: 'Lotte', age: 24},
{_id: '8903', name: 'Vera', age: 39} ]).execute();
Node.js JavaScript 代码
// Create a new collection 'my_collection'
db.createCollection('my_collection').then(function (myColl) {
// Add a document to insert
var insert = myColl.add({ name: 'Mats', age: 21 });
// Add multiple documents to insert
insert.add([
{ name: 'Lotte', age: 24 },
{ name: 'Vera', age: 39 }
]);
// Add one more document to insert
var myDoc = {};
myDoc.name = 'Jamie';
myDoc.age = 47;
insert.add(myDoc);
// run the operation
return insert.execute();
});
C#代码
// Create a new collection "my_collection"
var myColl = db.CreateCollection("my_collection");
// Insert JSON data directly
myColl.Add(new { name = "Mats", age = 21 }).Execute();
// Inserting several docs at once
myColl.Add(new[] {new { name = "Lotte", age = 24},
new { name = "Vera", age = 39} }).Execute();
// Insert Documents using DbDoc
var myDoc = new DbDoc();
myDoc.SetValue("name", "Jamie");
myDoc.SetValue("age", 47);
myColl.Add(myDoc).Execute();
//Fetch all docs
var docResult = myColl.Find().Execute();
var docs = docResult.FetchAll();
Python代码
# Create a new collection 'my_collection'
my_coll = my_schema.create_collection('my_collection')
# Insert JSON data directly
my_coll.add({'name': 'Mats', 'age': 21}).execute()
# Inserting several docs at once
my_coll.add([
{'name': 'Lotte', 'age': 24},
{'name': 'Vera', 'age': 39}
]).execute()
Java代码
// Create a new collection 'my_collection'
Collection coll = db.createCollection("my_collection");
// Insert JSON data directly
coll.add("{\"name\":\"Mats\", \"age\":21}").execute();
// Insert several documents at once
coll.add("{\"name\":\"Lotte\", \"age\":24}",
"{\"name\":\"Vera\", \"age\":39}").execute();
// Insert Documents using DbDoc
DbDoc myDoc = new coll.newDoc();
myDoc.add("name", new JsonString().setValue("Jamie"));
myDoc.add("age", new JsonNumber().setValue("47"));
coll.add(myDoc).execute();
C++代码
// Create a new collection 'my_collection'
Collection myColl = db.createCollection("my_collection");
// Insert JSON data directly
myColl.add(R"({"name": "Mats", "age": 21})").execute();
// Inserting several docs at once
std::list<DbDoc> docs = {
DbDoc(R"({"name": "Lotte", "age": 24})"),
DbDoc(R"({"name": "Vera", "age": 39})")
};
myColl.add(docs).execute();