WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Следующий раздел объясняет, как работать с коллекциями, как использовать
операции CRUD на коллекциях и возвратить документы. Работа с коллекциями документов прямая, используя X DevAPI.
Следующие примеры показывают основное использование операций
CRUD, работая с документами. После установления связи с сервером MySQL, создается новая коллекция,
которая может содержать документы JSON, и вставляются несколько документов.
Затем операция поиска выполняется, чтобы искать определенный документ из
коллекции. Наконец, коллекция удалена из базы данных.
Пример предполагает, что испытательная схема существует, а коллекция
MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code Документы того же самого типа группируются и хранятся в базе данных как
коллекции. X DevAPI использует объекты коллекции, чтобы сохранить документы.
Чтобы создать новую коллекцию, вызовите функцию
Произвольно, поле MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code Чтобы получить объект коллекции для существующей коллекции, сохраненной в
базе данных, вызовите функцию MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code Если коллекция еще не существует в базе данных, любой последующий вызов
функции объекта коллекции выдаст ошибку. Чтобы предотвратить это и
зафиксировать ошибку сразу же, установите поле
Поля В большинстве случаев хорошая практика это создать объекты базы данных в
течение времени разработки и воздержаться от создания их на лету во время
производственной стадии проекта базы данных. Поэтому лучше отделять код,
который создает коллекции в базе данных, от
кода пользовательского приложения. Чтобы сделать большое количество документов более эффективным, может
помочь создание индекса на основе одного или более полей, найденных в
документах в коллекции. Этот раздел описывает, как внести индекс в коллекцию.
Индексы коллекции это обычные индексы MySQL на виртуальных столбцах,
которые извлекают данные из документов в коллекции. В настоящее время MySQL
не может внести значения JSON в указатель непосредственно, поэтому чтобы
позволить индексировать коллекции с документами JSON, надо предоставить
документ JSON, который указывает поля документа, используемые индексом.
Вы передаете документ JSON, определяющий индекс как параметр
Создать индекс на основе такого поля, как почтовый индекс,
урезая результат 10 знаками: См. здесь
для получения информации о формате документа JSON для определения полей
как типы MySQL и в настоящее время поддержанные типы MySQL. Метод Чтобы удалить существующий индекс, примените метод
Поскольку индексы коллекции сохранены как виртуальные столбцы, чтобы
проверить созданный индекс, используется
Чтобы создать индекс на основе документов в коллекции, необходимо создать
документ Чтобы определить область документа для индексирования, тип поля
должен быть однородным для всей коллекции. Другими словами, тип должен быть
последовательным. Документ JSON, используемый для определения индекса, такой
как Одно описание В MySQL 8.0.16 и ранее области, которые являются множествами JSON, не
поддерживаются в индексе, определение области, которая содержит данные
массива, не производит ошибку сервера, но индекс не функционирует правильно.
Например, чтобы создать индекс на основе нескольких полей: Включая любые другие поля в
Если тип индекса не определяется или установлен в
Используя тип индекса Значения индексируемых областей преобразовываются от JSON до типа,
определенного в Поля Следующие типы данных поддерживаются для областей документа.
Описания типа нечувствительны к регистру.
Для MySQL 8.0.17 и выше X DevAPI поддерживает индексы на основе областей
множества, устанавливая поле
Следующие ограничения относятся к созданию индексов на основе множеств:
Для каждого индекса только одна индексируемая
область может быть Типы данных, для которых может быть создан
индекс на множествах: Следующий раздел объясняет отдельные функции объекта коллекции. Наиболее распространенные операции, которые будут выполнены на коллекции,
являются Create, Read, Update, Delete (CRUD). Чтобы ускорить операции поиска,
рекомендуется сделать надлежащее использование индексов. Коллекция должна быть создана функцией
Следующий пример показывает, как использовать
MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code У каждого документа есть уникальный идентификатор, названный document ID.
Этот document ID хранится в поле Следующий пример предполагает, что испытательная схема существует и
назначена на переменную db, что коллекция
MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code У некоторых документов есть естественный уникальный ключ.
Например, коллекция, которая содержит список книг, вероятно, будет включать
ISBN (International Standard Book Number) для каждого документа, который
представляет книгу. ISBN это последовательность длиной в 13 знаков, которая
в пределах длины поля MySQL Shell JavaScript Code
Используйте MySQL Shell JavaScript Code
В настоящее время X DevAPI не поддерживает использование никакой области
документа кроме неявного MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code Рис. 4.1. Collection.modify() Рис. 4.2. Collection.remove() Команды CRUD, рассмотренные в
разделе 4.3,
работают над группой документов в коллекции, которые соответствуют фильтру.
X DevAPI также обеспечивает следующие операции, которые работают над едиными
документами, которые определяются их document ID:
Используя эти операции вы можете ссылаться на документы по ID,
делая операции на единых документах более простыми примерно так: Синтаксис операций по единому документу следующий:
Эти операции принимают явное значение Если
Глава 4. Работа с коллекциями
4.1. Основные операции CRUD на коллекциях
my_collection
нет.
// Connecting to MySQL Server and working with a Collection
var mysqlx = require('mysqlx');
// Connect to server
var mySession = mysqlx.getSession( {
host: 'localhost', port: 33060,
user: 'user', password: '
password
'} );
var myDb = mySession.getSchema('test');
// Create a new collection 'my_collection'
var myColl = myDb.createCollection('my_collection');
// Insert documents
myColl.add({_id: '1', name: 'Laurie', age: 19}).execute();
myColl.add({_id: '2', name: 'Nadya', age: 54}).execute();
myColl.add({_id: '3', name: 'Lukas', age: 32}).execute();
// Find a document
var docs = myColl.find('name like :param1 AND age < :param2').limit(1).
bind('param1','L%').bind('param2',20).execute();
// Print document
print(docs.fetchOne());
// Drop the collection
myDb.dropCollection('my_collection');
# Connecting to MySQL Server and working with a Collection
from mysqlsh import mysqlx
# Connect to server
mySession = mysqlx.get_session( {
'host': 'localhost', 'port': 33060,
'user': 'user', 'password': '
password
'} )
myDb = mySession.get_schema('test')
# Create a new collection 'my_collection'
myColl = myDb.create_collection('my_collection')
# Insert documents
myColl.add({'_id': '1', 'name': 'Laurie', 'age': 19}).execute()
myColl.add({'_id': '2', 'name': 'Nadya', 'age': 54}).execute()
myColl.add({'_id': '3', 'name': 'Lukas', 'age': 32}).execute()
# Find a document
docs = myColl.find('name like :param1 AND age < :param2') \
.limit(1) \
.bind('param1','L%') \
.bind('param2',20) \
.execute()
# Print document
doc = docs.fetch_one()
print(doc)
# Drop the collection
myDb.drop_collection('my_collection')
// --------------------------------------------------
// Connecting to MySQL Server and working with a Collection
var mysqlx = require('@mysql/xdevapi');
var db;
// Connect to server
mysqlx
.getSession({
user: 'user',
password: 'password',
host: 'localhost',
port: '33060',
})
.then(function (session) {
db = session.getSchema('test');
// Create a new collection 'my_collection'
return db.createCollection('my_collection');
})
.then(function (myColl) {
// Insert documents
return Promise
.all([
myColl.add({ name: 'Laurie', age: 19 }).execute(),
myColl.add({ name: 'Nadya', age: 54 }).execute(),
myColl.add({ name: 'Lukas', age: 32 }).execute()
])
.then(function () {
// Find a document
return myColl
.find('name like :name && age < :age')
.bind({ name: 'L%', age: 20 })
.limit(1)
.execute(function (doc) {
// Print document
console.log(doc);
});
});
})
.then(function(docs) {
// Drop the collection
return db.dropCollection('my_collection');
})
.catch(function(err) {
// Handle error
});
// Connecting to MySQL Server and working with a Collection
// Connect to server
var mySession = MySQLX.GetSession("server=localhost;port=33060;user=user;password=
password
;");
var myDb = mySession.GetSchema("test");
// Create a new collection "my_collection"
var myColl = myDb.CreateCollection("my_collection");
// Insert documents
myColl.Add(new { name = "Laurie", age = 19}).Execute();
myColl.Add(new { name = "Nadya", age = 54}).Execute();
myColl.Add(new { name = "Lukas", age = 32}).Execute();
// Find a document
var docs = myColl.Find("name like :param1 AND age < :param2").Limit(1)
.Bind("param1", "L%").Bind("param2", 20).Execute();
// Print document
Console.WriteLine(docs.FetchOne());
// Drop the collection
myDb.DropCollection("my_collection");
# Connecting to MySQL Server and working with a Collection
import mysqlx
# Connect to server
my_session = mysqlx.get_session({
'host': 'localhost', 'port': 33060,
'user': 'user', 'password': 'password'
})
my_schema = my_session.get_schema('test')
# Create a new collection 'my_collection'
my_coll = my_schema.create_collection('my_collection')
# Insert documents
my_coll.add({'name': 'Laurie', 'age': 19}).execute()
my_coll.add({'name': 'Nadya', 'age': 54}).execute()
my_coll.add({'name': 'Lukas', 'age': 32}).execute()
# Find a document
docs = my_coll.find('name like :param1 AND age < :param2') \
.limit(1) \
.bind('param1', 'L%') \
.bind('param2', 20) \
.execute()
# Print document
doc = docs.fetch_one()
print("Name: {0}".format(doc['name']))
print("Age: {0}".format(doc['age]))
# Drop the collection
my_session.drop_collection('test', 'my_collection')
// Connect to server
Session mySession = new SessionFactory().getSession("mysqlx://localhost:33060/test?user=user&password=password");
Schema myDb = mySession.getSchema("test");
// Create a new collection 'my_collection'
Collection myColl = myDb.createCollection("my_collection");
// Insert documents
myColl.add("{\"name\":\"Laurie\", \"age\":19}").execute();
myColl.add("{\"name\":\"Nadya\", \"age\":54}").execute();
myColl.add("{\"name\":\"Lukas\", \"age\":32}").execute();
// Find a document
DocResult docs = myColl.find("name like :name AND age < :age")
.bind("name", "L%").bind("age", 20).execute();
// Print document
DbDoc doc = docs.fetchOne();
System.out.println(doc);
// Drop the collection
myDB.dropCollection("my_collection");
// Connecting to MySQL Server and working with a Collection
#include <mysqlx/xdevapi.h>
// Connect to server
Session session(33060, "user", "password");
Schema db = session.getSchema("test");
// Create a new collection 'my_collection'
Collection myColl = db.createCollection("my_collection");
// Insert documents
myColl.add(R"({"name": "Laurie", "age": 19})").execute();
myColl.add(R"({"name": "Nadya", "age": 54})").execute();
myColl.add(R"({"name": "Lukas", "age": 32})").execute();
// Find a document
DocResult docs = myColl.find("name like :param1 AND age < :param2").limit(1)
.bind("param1","L%").bind("param2",20).execute();
// Print document
cout << docs.fetchOne();
// Drop the collection
db.dropCollection("my_collection");
4.2. Объекты коллекции
4.2.1. Создание коллекции
createCollection()
от объекта схемы.
Это возвращает Объект коллекции, который может использоваться сразу же,
например чтобы вставить документы в коллекцию.reuseExistingObject
может быть установлено в true и передаваться как второй параметр, чтобы
предотвратить ошибку, если коллекция с тем же самым именем уже существует.
// Create a new collection called 'my_collection'
var myColl = db.createCollection('my_collection');
# Create a new collection called 'my_collection'
myColl = db.create_collection('my_collection')
// Create a new collection called 'my_collection'
var promise = db.createCollection('my_collection');
// Create a new collection or reuse existing one
var promise = db.createCollection('my_collection',
{ ReuseExistingObject: true } );
// Create a new collection called "my_collection"
var myColl = db.CreateCollection("my_collection");
// Create a new collection or reuse existing one
var myExistingColl = db.CreateCollection("my_collection",
ReuseExistingObject: true);
# Create a new collection called 'my_collection'
my_coll = my_schema.create_collection('my_collection')
// Create a new collection called 'my_collection'
Collection myColl = db.createCollection("my_collection");
// Create a new collection or reuse existing one
// second parameter is: boolean reuseExistingObject
Collection myExistingColl = db.createCollection("my_collection", true);
// Create a new collection called 'my_collection'
Collection myColl = db.createCollection("my_collection");
// Create a new collection or reuse existing one
Collection myExistingColl = db.createCollection("my_collection", true);
4.2.2.
Работа с существующими коллекциями
getCollection()
от объекта схемы.
// Get a collection object for 'my_collection'
var myColl = db.getCollection('my_collection');
# Get a collection object for 'my_collection'
myColl = db.get_collection('my_collection')
// Get a collection object for 'my_collection'
var collection = db.getCollection('my_collection');
// Get a collection object for "my_collection"
var myColl = db.GetCollection("my_collection");
// Get a collection object but also ensure it exists in the database
var myColl2 = db.GetCollection("my_collection", ValidateExistence: true);
# Get a collection object for 'my_collection'
my_coll = my_schema.get_collection('my_collection')
// Get a collection object for 'my_collection'
Collection myColl = db.getCollection("my_collection");
// Get a collection object but also ensure it exists in the database
// second parameter is: boolean requireExists
Collection myColl = db.getCollection("my_collection", true);
// Get a collection object for 'my_collection'
Collection myColl = db.getCollection("my_collection");
// Get a collection object but also ensure it exists in the database
Collection myColl = db.getCollection("my_collection", true);
validateExistence
= true и передайте его
как второй параметр db.getCollection()
.createCollection()
и
ReuseExistingObject
, установленные в true,
могут использоваться, чтобы создать новую или снова использовать
существующую коллекцию с именем.4.2.3. Индексация коллекций
Создание индекса
IndexDefinition
) метода
Collection.createIndex(
. Например, чтобы создать обязательный индекс целого типа на
основе поля
name
count
:
myCollection.createIndex("count", {fields:[{"field": "$.count", "
type":"INT", required:true}]});
myCollection.createIndex("zip", {fields: [{field: "$.zip",
type: "TEXT(10)"}]})
Collection.createIndex()
терпит неудачу с ошибкой, если индекс с тем же самым именем уже существует
или если определение индекса правильно не сформировано.
Параметр имени требуется и должен быть действительным именем индекса, как
принято командой SQL
CREATE INDEX
.collection.dropIndex(string name)
.
Это удалит индекс с переданным именем, операция тихо успешна, даже
если названный индекс не существует.SHOW INDEX
.
Например, можно использовать этот SQL в MySQL Shell:
session.runSql('SHOW INDEX FROM mySchema.myCollection');
Определение индекса
IndexDefinition
JSON.
Эта секция объясняет действительные поля, которые можно использовать в таком
документе JSON, чтобы определить индекс.{fields: [{field:
'$.username', type: 'TEXT'}]}
, может содержать следующее:fields
:
множество по крайней мере из одного объекта
IndexField
, каждый из которых описывает область
документа JSON, которая будет включена в индекс.IndexField
состоит из следующих областей:field
:
последовательность со всем путем документа к члену
документа или полем, которое будет внесено в индекс.type
:
последовательность с одним из поддержанных типов столбца, чтобы отобразить
поле (см.
здесь). Для числовых типов, дополнительное ключевое слово
UNSIGNED
может следовать. Для типа
TEXT
может определить длину для индексации.
required
:
дополнительное булево значение, true
если поле
обязано существовать в документе. По умолчанию
false
для всех типов, кроме
GEOJSON
, там по умолчанию
true
.options
:
дополнительное целое число, используемое в качестве специальных флагов
выбора, чтобы использовать, расшифровывая данные
GEOJSON
data.srid
:
дополнительное целое число, значение srid, чтобы использовать,
расшифровывая данные GEOJSON
.array
: (MySQL 8.0.17 и
выше) дополнительное булево значение, true
если
поле содержит множества. Значение по умолчанию
false
. См.
здесь.type
:
дополнительная последовательность, которая определяет тип индекса. Одно из
INDEX
или SPATIAL
.
По умолчанию INDEX
и может быть опущен.
myCollection.createIndex('myIndex', {fields: [{field: '$.myField',
type: 'TEXT'}, //
{field: '$.myField2', type: 'TEXT(10)'},
{field: '$.myField3', type: 'INT'}]})
IndexDefinition
или
IndexField
в документ JSON, которые здесь не
упомянуты, вызов collection.createIndex()
потерпит неудачу с ошибкой.INDEX
, тогда получающийся индекс создается таким
же образом, как был бы создан после команды
CREATE INDEX
. Если тип индекса
SPATIAL
тогда созданный индекс совпадает с тем,
какой был бы создан после команды
CREATE INDEX
с ключевым словом
SPATIAL
, см.
SPATIAL Index Optimization и
Creating Spatial Indexes. Например:
myCollection.createIndex('myIndex', //
{fields: [{field: '$.myGeoJsonField',
type: 'GEOJSON', required: true}], type:'SPATIAL'})
SPATIAL
,
поле required
не может быть установлено в
false
в записях
IndexField
.IndexField
,
используя стандартные преобразования типов MySQL (см.
Type Conversion in Expression Evaluation), за исключением
GEOJSON
, который использует функцию
ST_GeomFromGeoJSON()
для
конвертации. Это означает что, используя числовой тип в
IndexField
, фактическое нечисловое
значение поля преобразовывается в 0.options
и
srid
в IndexField
могут присутствовать только, если
type
= GEOJSON
.
Если существуют, они используются в качестве параметров для
ST_GeomFromGeoJSON()
,
преобразовывая GEOJSON
в значения MySQL
GEOMETRY
.Типы данных полей
INT
[UNSIGNED]TINYINT
[UNSIGNED]SMALLINT
[UNSIGNED]MEDIUMINT
[UNSIGNED]INTEGER
[UNSIGNED]BIGINT
[UNSIGNED]REAL
[UNSIGNED]FLOAT
[UNSIGNED]DOUBLE
[UNSIGNED]DECIMAL
[UNSIGNED]NUMERIC
[UNSIGNED]GEOJSON
(extra options: options, srid)
Индексация областей множества
array
= true
в
IndexField
. Например, чтобы создать индекс на
области множества emails
:
collection.createIndex("emails_idx", //
{fields: [{"field": "$.emails",
"type":"CHAR(128)", "array": true}]});
array
.
4.3. Обзор функций CRUD для коллекций
Collection.add()
Collection.add()
используется, чтобы хранить
документы в базе данных. Это берет единый документ или список документов и
выполняет функцию run()
.Schema.createCollection()
перед вставкой
документов. Чтобы вставить документы в существующую коллекцию используют
Schema.getCollection()
.Collection.add()
. Пример предполагает, что
испытательная схема существует, а коллекция
my_collection
нет.
// Create a new collection
var myColl = db.createCollection('my_collection');
// Insert a document
myColl.add( {_id: '1', name: 'Laurie', age: 19 } ).execute();
// Insert several documents at once
myColl.add( [
{_id: '5', name: 'Nadya', age: 54 },
{_id: '6', name: 'Lukas', age: 32 } ] ).execute();
# Create a new collection
myColl = db.create_collection('my_collection')
# Insert a document
myColl.add( {'_id': '1', 'name': 'Laurie', 'age': 19 } ).execute()
# Insert several documents at once
myColl.add( [
{'_id': '5', 'name': 'Nadya', 'age': 54 },
{'_id': '6', 'name': 'Lukas', 'age': 32 } ] ).execute()
// Create a new collection
db.createCollection('myCollection').then(function (myColl) {
return Promise.all([
// Insert a document
myColl
.add({ name: 'Laurie', age: 19 })
.execute(),
// Insert several documents at once
myColl
.add([
{ name: 'Nadya', age: 54 },
{ name: 'Lukas', age: 32 }
])
.execute()
])
});
// Assumptions: test schema assigned to db, my_collection collection not exists
// Create a new collection
var myColl = db.CreateCollection("my_collection");
// Insert a document
myColl.Add(new { name = "Laurie", age = 19 }).Execute();
// Insert several documents at once
myColl.Add(new[] {
new { name = "Nadya", age = 54 },
new { name = "Lukas", age = 32 } }).Execute();
# Create a new collection
my_coll = my_schema.create_collection('my_collection')
# Insert a document
my_coll.add({'name': 'Laurie', 'age': 19}).execute()
# Insert several documents at once
my_coll.add([
{'name': 'Nadya', 'age': 54},
{'name': 'Lukas', 'age': 32}
]).execute()
// Create a new collection
Collection coll = db.createCollection("payments");
// Insert a document
coll.add("{\"name\":\"Laurie\", \"age\":19}");
// Insert several documents at once
coll.add("{\"name\":\"Nadya\", \"age\":54}",
"{\"name\":\"Lukas\", \"age\":32}");
// Create a new collection
Collection coll = db.createCollection("payments");
// Insert a document
coll.add(R"({"name":"Laurie", "age":19})").execute();
// Insert several documents at once
std::list<DbDoc> docs = {
DbDoc(R"({"name":"Nadya", "age":54})"),
DbDoc(R"({"name":"Lukas", "age":32})")};
coll.add(docs).execute();
Идентичность документа
_id
документа.
Это VARBINARY()
с максимальной
длиной 32 знаков. Этот раздел описывает, как document ID могут
использоваться, см. детали в
раздлеле 5.1.my_collection
существует и что
custom_id уникален.
// If the _id is provided, it will be honored
var result = myColl.add( { _id: 'custom_id', a : 1 } ).execute();
var document = myColl.find("a = 1").execute().fetchOne();
print("User Provided Id:", document._id);
// If the _id is not provided, one will be automatically assigned
result = myColl.add( { b: 2 } ).execute();
print("Autogenerated Id:", result.getGeneratedIds()[0]);
# If the _id is provided, it will be honored
result = myColl.add( { '_id': 'custom_id', 'a' : 1 } ).execute()
document = myColl.find('a = 1').execute().fetch_one()
print("User Provided Id: %s" % document._id)
# If the _id is not provided, one will be automatically assigned
result = myColl.add( { 'b': 2 } ).execute()
print("Autogenerated Id: %s" % result.get_generated_ids()[0])
// If the _id is provided, it will be honored
myColl.add({ _id: 'custom_id', a : 1 }).execute().then(function () {
myColl.getOne('custom_id').then(function (doc) {
console.log('User Provided Id:', doc._id);
});
});
// If the _id is not provided, one will be automatically assigned
myColl.add({ b: 2 }).execute().then(function (result) {
console.log('Autogenerated Id:', result.getGeneratedIds()[0]);
});
// If the _id is provided, it will be honored
var result = myColl.Add(new { _id = "custom_id", a = 1 }).Execute();
Console.WriteLine("User Provided Id:", result.AutoIncrementValue);
// If the _id is not provided, one will be automatically assigned
result = myColl.Add(new { b = 2 }).Execute();
Console.WriteLine("Autogenerated Id:", result.AutoIncrementValue);
# If the _id is provided, it will be honored
result = my_coll.add({'_id': 'custom_id', 'a': 1}).execute()
print("User Provided Id: {0}".format(result.get_last_document_id()))
# If the _id is not provided, one will be automatically assigned
result = my_coll.add({'b': 2}).execute()
print("Autogenerated Id: {0}".format(result.get_last_document_id()))
// If the _id is provided, it will be honored
AddResult result = coll.add("{\"_id\":\"custom_id\",\"a\":1}").execute();
System.out.println("User Provided Id:" + ((JsonString) coll.
getOne("custom_id").get("_id")).getString());
// If the _id is not provided, one will be automatically assigned
result = coll.add("{\"b\":2}").execute();
System.out.println("Autogenerated Id:" + result.getGeneratedIds().get(0));
// If the _id is provided, it will be honored
Result result = myColl.add(R"({ "_id": "custom_id", "a" : 1 })").execute();
std::vector<string> ids = result.getGeneratedIds();
if (ids.empty()) cout << "No Autogenerated Ids" << endl;
// If the _id is not provided, one will be automatically assigned
result = myColl.add(R"({ "b": 2 })").execute();
ids = result.getGeneratedIds();
cout << "Autogenerated Id:" << ids[0] << endl;
_id
.
// using a book's unique ISBN as the object ID
myColl.add( {_id: "978-1449374020",
title: "MySQL Cookbook: Solutions for Database Developers and Administrators"
}).execute();
find()
, чтобы получить
недавно вставленную книгу из коллекции по ее document ID:
var book = myColl.find('_id = "978-1449374020"').execute();
_id
как document ID.
Нет никакого способа определить другой document ID (первичный ключ).Collection.find()
find()
используется, чтобы получить документы
от базы данных. Это берет
SearchConditionStr
в качестве параметра, чтобы определить документы, которые должны быть
возвращены из базы данных. Несколько методов, например,
fields()
,
sort()
, skip()
и
limit()
могут быть применены в функции
find()
, чтобы далее уточнить результат.fetch()
на самом деле вызывает выполнение
операции. Пример предполагает, что существует испытательная схема и
коллекция my_collection
.
// Use the collection 'my_collection'
var myColl = db.getCollection('my_collection');
// Find a single document that has a field 'name' starts with an 'L'
var docs = myColl.find('name like :param').
limit(1).bind('param', 'L%').execute();
print(docs.fetchOne());
// Get all documents with a field 'name' that starts with an 'L'
docs = myColl.find('name like :param').
bind('param','L%').execute();
var myDoc;
while (myDoc = docs.fetchOne()) {
print(myDoc);
}
# Use the collection 'my_collection'
myColl = db.get_collection('my_collection')
# Find a single document that has a field 'name' starts with an 'L'
docs = myColl.find('name like :param').limit(1).bind('param', 'L%').execute()
print(docs.fetch_one())
# Get all documents with a field 'name' that starts with an 'L'
docs = myColl.find('name like :param').bind('param','L%').execute()
myDoc = docs.fetch_one()
while myDoc:
print(myDoc)
myDoc = docs.fetch_one()
// Use the collection 'my_collection'
var myColl = db.getCollection('my_collection');
// Find a single document that has a field 'name' that starts with an 'L'
myColl
.find('name like :name')
.bind('name', 'L%')
.limit(1)
.execute(function (doc) {
console.log(doc);
})
.then(function () {
// handle details
});
// Get all documents with a field 'name' that starts with an 'L'
myColl
.find('name like :name')
.bind('name', 'L%')
.execute(function (doc) {
console.log(doc);
})
.then(function () {
// handle details
});
// Use the collection "my_collection"
var myColl = db.GetCollection("my_collection");
// Find a single document that has a field "name" starts with an "S"
var docs = myColl.Find("name like :param").Limit(1).
Bind("param", "L%").Execute();
Console.WriteLine(docs.FetchOne());
// Get all documents with a field "name" that starts with an "S"
docs = myColl.Find("name like :param").Bind("param", "L%").Execute();
while (docs.Next())
{
Console.WriteLine(docs.Current);
}
# Use the collection 'my_collection'
my_coll = my_schema.get_collection('my_collection')
# Find a single document that has a field 'name' starts with an 'L'
docs = my_coll.find('name like :param').limit(1).bind('param', 'L%').execute()
print(docs.fetch_one())
# Get all documents with a field 'name' that starts with an 'L'
docs = my_coll.find('name like :param').bind('param', 'L%').execute()
doc = docs.fetch_one()
print(doc)
// Use the collection 'my_collection'
Collection myColl = db.getCollection("my_collection");
// Find a single document that has a field 'name' starts with an 'L'
DocResult docs = myColl.find("name like :name").bind("name", "L%").execute();
System.out.println(docs.fetchOne());
// Get all documents with a field 'name' that starts with an 'L'
docs = myColl.find("name like :name").bind("name", "L%").execute();
while (docs.hasNext()) {
DbDoc myDoc = docs.next();
System.out.println(myDoc);
}
// Use the collection 'my_collection'
Collection myColl = db.getCollection("my_collection");
// Find a single document that has a field 'name' starts with an 'L'
DocResult docs = myColl.find("name like :param").
limit(1).bind("param", "L%").execute();
cout << docs.fetchOne() << endl;
// Get all documents with a field 'name' that starts with an 'L'
docs = myColl.find("name like :param").bind("param","L%").execute();
DbDoc myDoc;
while ((myDoc = docs.fetchOne()))
{
cout << myDoc << endl;
}
Collection.modify()
Collection.remove()
4.4. Операции по единому документу
Collection.replaceOne(string id, Document doc)
обновляет или заменяет документ, определенный id, если это существует.
Collection.addOrReplaceOne(string id,
Document doc)
добавляет данный документ. Если id или какая-либо другая
область, у которой есть уникальный индекс, уже существует в коллекции,
операция вместо этого обновляет соответствующий документ.Collection.getOne(string id)
возвращает документ с данным id. Это короткий путь для
Collection.find("_id = :id").bind("id",
id).execute().fetchOne()
.Collection.removeOne(string id)
удаляет документ с данным id. Это короткий путь для
Collection.remove("_id = :id").bind("id", id).execute()
.
doc = collection.getOne(id);
doc["address"] = "123 Long Street";
collection.replaceOne(id, doc);
Синтаксис операций по единому документу
Document getOne(string
, где
id
)id
это document ID документа, который будет
получен. Эта операция возвращает документ или
NULL
, если никакое соответствие не найдено.
Ищут документ, у которого есть данный
id
.Result removeOne(string
, где
id
)id
это document ID удаляемого
документа. Эта операция возвращает Result
,
который указывает на количество удаленных документов (1 или 0, если ни
один не удален).Result replaceOne(string
, где
id
, Document
doc
)id
это document ID
документа, который будет заменен,
doc
это новый документ, который
может содержать выражения. Если doc
содержит значение _id
,
это проигнорировано. Операция возвращает Result
,
который указывает на количество затронутых документов (1 или 0, если ни
одного). Берет объект документа, который заменяет соответствующий документ.
Если никакие соответствия не найдены, функция завершается
без внесенных изменений.Result addOrReplaceOne(string id, Document doc)
,
где id
это document ID документа, который будет
заменен, а doc
это
новый документ, который может содержать выражения. Если
doc
содержит значение
_id
, это проигнорировано.
Эта операция возвращает Result
,
который указывает на количество затронутых документов (1 или 0,
если ни одного).id
,
чтобы гарантировать, что любые изменения, сделанные операцией, применяются к
намеченному документу. Во многих скриптах документ
doc
мог прибыть от пользователя, которому не доверяют, который мог потенциально
изменить данные id
в документе и таким образом заменить другие документы.
Чтобы снизить этот риск, необходимо передать явный document
id
через безопасный канал.doc
имеет значение для
_id
и это не соответствует данному
id
, тогда ошибка произведена.
Если в коллекции есть документ с данным document ID, коллекция проверяется на
любой документ, который находится в противоречии с уникальными ключами
doc
и где document ID
противоречивых документов не id
,
тогда ошибка произведена. Иначе существующий документ в коллекции заменяется
на doc
.
Если у коллекции есть какой-либо документ, который находится в противоречии с
уникальными ключами от doc
,
тогда ошибка произведена. Иначе doc
успешно добавляется к коллекции.Document getOne(string
, где
id
)id
это document ID документа, который будет
получен. Эта операция возвращает документ или
NULL
, если ничего не нашлось.
Ищут документ, у которого есть данный
id
.Result removeOne(string
, где
id
)id
это document ID
удаляемого документа. Эта операция возвращает
Result
, который указывает на количество
удаленных документов (1 или 0, если ни одного).
Найди своих коллег! |
Вы можете направить письмо администратору этой странички, Алексею Паутову.