![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Как только коллекция была создана, она может хранить документы JSON.
Вы храните документы, передавая структуру данных JSON функции
Кроме того, в некоторых MySQL Connectors могут использоваться объекты
Для строго типизированных языков возможно создать файлы класса на основе
определения структуры документа коллекций. MySQL Shell может использоваться,
чтобы создать эти файлы. Объекты документа Поддержанные языки Преимущества Native JSON Скрипты (JavaScript, Python) Просто в использовании Эквивалентный синтаксис JSON C# (Anonymous Types, ExpandoObject) Просто в использовании DbDoc Все языки вообще Не зависит от языка Generated Doc Classes Строго типизированные языки (C#) Естественный в использовании Следующий пример показывает различные методы
вставки документов в коллекцию. MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code У каждого документа есть уникальный идентификатор, названный document ID,
который может считаться эквивалентом первичного ключа таблицы.
Значение идентификатора обычно автоматически производится сервером, когда
документ добавляется, но может также быть вручную назначено.
Назначенный document ID возвращен в результате операции
Следующее показано в качестве примеров, добавляющих документ в коллекцию,
восстанавливая ID добавленного документа и проверяя, что дубликаты ID
не могут быть добавлены. X DevAPI полагается на базирующийся на сервере генератор document ID,
добавленный в версии MySQL version 8.0.11, который приводит
к последовательно увеличивающемуся document ID для всех клиентов.
Поле При использовании ручной вставки document ID,
необходимо гарантировать, что ID из автоматически
произведенной сервером последовательности ID никогда не используются.
X Plugin не знает о данных, вставленных в коллекцию, включая ID, которые вы
используете. Таким образом в будущих вставках, если document ID, который вы
назначили вручную, вставляя документ, использует ID, который сервер собирался
использовать, операция вставки терпит неудачу с ошибкой из-за
дублирования первичного ключа. Каждый раз, когда значение поля Поле В Group Replication с несколькими мастерами или на кластере InnoDB
произведенные значения Этот раздел описывает, как document ID форматируется. Общая структура
таблицы коллекции остается неизменной, за исключением типа произведенного
столбца Формат автоматически произведенного document ID: Здесь:
Этот формат document ID гарантирует, что: Значение первичного ключа монотонно увеличивается
для вставок, происходящих из единственного экземпляра сервера, хотя интервал
между значениями не однороден в таблице. Используя Group Replication или кластер InnoDB,
у вставок в ту же самую таблицу от различных экземпляров нет противоречивых
значений первичного ключа, предполагается, что экземпляры имеют правильно
настроенные системные переменные
Глава 5. Работа с документами
Collection.add()
. У некоторых языков есть прямая
поддержка данных JSON, у других есть эквивалентный синтаксис, чтобы
представлять те данные. MySQL Connectors, которые осуществляют X DevAPI,
обеспечивают поддержку всех методов, которые являются родными
на определенном языке.DbDoc
. Наиболее удобный способ создать их, это
вызов Collection.newDoc()
.
DbDoc
это тип данных, чтобы представлять
документы JSON, как он осуществляется не определяется. Языки, осуществляющие
X DevAPI, свободны следовать за объектно-ориентированным подходом
с методами получателя и установщика или использовать стиль
структуры C с публичными членами.
// Create a new collection 'my_collection'
var myColl = db.createCollection('my_collection');
// Insert JSON data directly
myColl.add({_id: '8901', name: 'Sakila', age: 15});
// Inserting several docs at once
myColl.add([ {_id: '8902', name: 'Susanne', age: 24},
{_id: '8903', name: 'User', age: 39} ]);
// Create a new collection 'my_collection'
var myColl = db.createCollection('my_collection');
// Insert JSON data directly
myColl.add({_id: '8901', name: 'Sakila', age: 15});
// Inserting several docs at once
myColl.add([ {_id: '8902', name: 'Susanne', age: 24},
{_id: '8903', name: 'User', age: 39} ]);
// Create a new collection 'my_collection'
db.createCollection('my_collection').then(function (myColl) {
// Add a document to insert
var insert = myColl.add({ name: 'Sakila', age: 15 });
// Add multiple documents to insert
insert.add([
{ name: 'Susanne', age: 24 },
{ name: 'User', age: 39 }
]);
// Add one more document to insert
var myDoc = {};
myDoc.name = 'James';
myDoc.age = 47;
insert.add(myDoc);
// run the operation
return insert.execute();
});
// Create a new collection "my_collection"
var myColl = db.CreateCollection("my_collection");
// Insert JSON data directly
myColl.Add(new { name = "Sakila", age = 15 }).Execute();
// Inserting several docs at once
myColl.Add(new[] {new { name = "Susanne", age = 24},
new { name = "User", age = 39} }).Execute();
// Insert Documents
var myDoc = new DbDoc();
myDoc.SetValue("name", "James");
myDoc.SetValue("age", 47);
myColl.Add(myDoc).Execute();
//Fetch all docs
var docResult = myColl.Find().Execute();
var docs = docResult.FetchAll();
# Create a new collection 'my_collection'
my_coll = my_schema.create_collection('my_collection')
# Insert JSON data directly
my_coll.add({'name': 'Sakila', 'age': 15})
# Inserting several docs at once
my_coll.add([
{'name': 'Susanne', 'age': 24},
{'name': 'User', 'age': 39}
])
// Create a new collection 'my_collection'
Collection coll = db.createCollection("my_collection");
// Insert JSON data directly
coll.add("{\"name\":\"Sakila\", \"age\":15}");
// Insert several documents at once
coll.add("{\"name\":\"Susanne\", \"age\":24}",
"{\"name\":\"User\", \"age\":39}");
// Insert Documents
DbDoc myDoc = new coll.newDoc();
myDoc.add("name", new JsonString().setValue("James"));
myDoc.add("age", new JsonNumber().setValue("47"));
coll.add(myDoc);
// Create a new collection 'my_collection'
Collection myColl = db.createCollection("my_collection");
// Insert JSON data directly
myColl.add(R"({"name": "Sakila", "age": 15})").execute();
// Inserting several docs at once
std::list<DbDoc> docs = {
DbDoc(R"({"name": "Susanne", "age": 24})"),
DbDoc(R"({"name": "User", "age": 39})")
};
myColl.add(docs).execute();
5.1. Работа с Document ID
collection.add()
. См.
раздел 5.1.1.
mysql-js > mycollection.add({test:'demo01'})
Query OK, 1 item affected (0.00 sec)
mysql-js > mycollection.add({test:'demo02'}).add({test:'demo03'})
Query OK, 2 items affected (0.00 sec)
mysql-js > mycollection.find()
[
{
"_id": "00005a640138000000000000002c",
"test": "demo01"
},
{
"_id": "00005a640138000000000000002d",
"test": "demo02"
},
{
"_id": "00005a640138000000000000002e",
"test": "demo03"
}
]
3 documents in set (0.00 sec)
mysql-js > mycollection.add({_id:'00005a640138000000000000002f', test:'demo04'})
Query OK, 1 item affected (0.00 sec)
mysql-js > mycollection.find()
[
{
"_id": "00005a640138000000000000002c",
"test": "demo01"
},
{
"_id": "00005a640138000000000000002d",
"test": "demo02"
},
{
"_id": "00005a640138000000000000002e",
"test": "demo03"
},
{
"_id": "00005a640138000000000000002f",
"test": "demo04"
}
]
4 documents in set (0.00 sec)
mysql-js > mycollection.add({test:'demo05'})
ERROR: 5116: Document contains a field value that is not unique
but required to be
5.1.1. Понимание Document ID
InnoDB
использует document ID
в качестве первичного ключа, поэтому эти последовательные первичные ключи для
всех клиентов применяются в эффективных расщеплениях
страницы и перестройках дерева.Свойства Document ID
_id
документа ведет себя таким же
образом как любая другая область документа во время запросов
за исключением того, что его значение не может измениться после вставки в
коллекцию. Поле _id
используется в качестве
первичного ключа коллекции (использующей сохраненные произведенные столбцы).
Возможно отвергнуть автоматическую генерацию document ID
вручную включая ID._id
не присутствует во вставленном документе, сервер производит значение
_id
. Произведенное значение
_id
, используемое для документа, возвращено
клиенту как часть сообщения Result
о вставке
документа. При использовании X DevAPI на кластере InnoDB
автоматически произведенное _id
должно быть уникальным в пределах кластера. Используйте опцию
mysqlx_document_id_unique_prefix
, чтобы гарантировать, что часть
unique_prefix
document ID
уникальна для replicaset или группы._id
должно быть последовательным
(всегда увеличивающимся) для оптимальной работы вставки InnoDB (по крайней
мере, в единственном сервере). Последовательная природа
_id
сохраняется через перезапуски сервера._id
таблицы уникальны
между экземплярами, чтобы избежать конфликтов первичного ключа и
минимизировать операционную сертификацию.Создание Document ID
_id
, который изменяется от
VARCHAR(32)
на
VARBINARY(32)
.
unique_prefix
start_timestamp
serial 4 байта 8 байт
16 байт serial
автоматически увеличенное значение
порядкового номера экземпляра (целое число), которое является закодированным
в 16-чном виде и имеет диапазон от 0 до 2**64-1. Начальное значение
of serial
установлено в системной переменной
auto_increment_offset
и приращение задано системной переменной
auto_increment_increment
.
start_timestamp
метка времени запуска экзепляра в шестнадцатеричном формате.
В маловероятном случае, что значение
serial
переполнится,
start_timestamp
увеличено на 1 и
serial
перезапускается с 0.unique_prefix
значение, назначенное кластером InnoDB экземпляру, которое используется,
чтобы сделать document ID уникальным через все узлы этого кластера.
Диапазон unique_prefix от 0 до 2**16-1 в шестнадцатеричном формате и по
умолчанию 0, если не установлен кластером InnoDB или системная переменная
mysqlx_document_id_unique_prefix
не была задана.auto_increment_*
.
Найди своих коллег! |
Вы можете
направить письмо администратору этой странички, Алексею Паутову.