Глава 7. Работа с относительными таблицами и документами
После изучения, как работать с документами и относительными таблицами,
этот раздел объясняет, как их объединить.
Это может быть выгодно, чтобы использовать документы для очень
определенных задач и полагаться на таблицы для других задач.
Или очень простой документ может перерасти модель документа и объединяться
или перейти в более сильную базу данных. Таким образом, преимущества
документов и таблиц могут быть объединены.
Таблицы SQL вносят строго типизированную семантику значений, предсказуемое и
оптимизированное хранение. Документы вносят гибкость типа, гибкость
схемы и нескалярные типы.
7.1. Коллекции как относительные таблицы
Запросы, которые стремятся снабдить стандартные столбцы SQL документами,
могут конвертировать коллекцию к таблице. В этом случае коллекция может быть
принесена как объект таблицы функцией
Schema.getCollectionAsTable() .
С этого момента она рассматривается как таблица. К значениям документа можно
получить доступ в операциях CRUD SQL, используя следующий синтаксис:
doc->'$.field'
doc->'$.field' используется, чтобы
получить доступ к высокоуровневым областям документа.
Более сложные пути также могут быть определены.
doc->'$.some.field.like[3].this'
Как только коллекция была получена как таблица через
Schema.getCollectionAsTable() , все операции SQL
CRUD могут использоваться. Используя синтаксис для доступа к документу, можно
выбрать данные из документов коллекции и дополнительных столбцов SQL.
Следующие примеры показывают, как вставить последовательность документа
JSON в поле doc .
MySQL Shell JavaScript Code
// Get the customers collection as a table
var customers = db.getCollectionAsTable('customers');
customers.insert('doc').values('{"_id":"001", "name": "Ana", "last_name": "Silva"}').execute();
// Now do a find operation to retrieve the inserted document
var result = customers.select(["doc->'$.name'", "doc->'$.last_name'"]).where("doc->'$._id' = '001'").execute();
var record = result.fetchOne();
print ("Name : "+ record[0]);
print ("Last Name : "+ record[1]);
MySQL Shell Python Code
# Get the customers collection as a table
customers = db.get_collection_as_table('customers')
customers.insert('doc').values('{"_id":"001", "name": "Ana",
"last_name": "Silva"}').execute()
# Now do a find operation to retrieve the inserted document
result = customers.select(["doc->'$.name'",
"doc->'$.last_name'"]).
where("doc->'$._id' = '001'").execute()
record = result.fetch_one()
print("Name : %s\n"% record[0])
print("Last Name : %s\n"% record[1])
Node.js JavaScript Code
// Get the customers collection as a table
var customers = db.getCollectionAsTable('customers');
customers.insert('doc').values('{"_id":"001", "name": "Ana"}').execute();
C# Code
// Get the customers collection as a table
var customers = db.GetCollectionAsTable("customers");
customers.Insert("doc").Values("{ \"_id\": 1, \"name\": \"Ana\" }").Execute();
Python Code
# Get the customers collection as a table
customers = db.get_collection_as_table("customers")
customers.insert('doc').values({'_id':'001', 'name': 'Ana', 'last_name': 'Silva'}).execute()
# Now do a find operation to retrieve the inserted document
result = customers.select(["doc->'$.name'", "doc->'$.last_name'"]).where("doc->'$._id' = '001'").execute()
record = result.fetch_one()
print('Name : {0}'.format(record[0]))
print('Last Name : {0}'.format(record[1]))
Java Code
// Get the customers collection as a table
Table customers = db.getCollectionAsTable("customers");
customers.insert("doc").values("{\"name\": \"Ana\"}").execute();
C++ Code
// Get the customers collection as a table
Table customers = db.getCollectionAsTable("customers");
customers.insert("doc").values(R"({"_id":"001", "name": "Ana",
"last_name": "Silva"})").execute();
// Now do a find operation to retrieve the inserted document
RowResult result = customers.select("doc->'$.name'",
"doc->'$.last_name'").
where("doc->'$._id' = '001'").execute();
Row record = result.fetchOne();
cout << "Name : " << record[0] << endl;
cout << "Last Name : " << record[1] << endl;
|