Update all or specific records in the database.
Method Syntax
db.update(resource)
The .update() method is followed by second method that refers to the type of update to use: an update with .content(), .merge(), or .patch().
.update().content()
Updates all records in a table, or a specific record, in the database.
Method Syntax
db.update(resource).content(data)
This function replaces the current document / record data with the specified data.
Arguments
| Argument | Type | Description |
|---|
resource | The table name or the specific record ID to create. |
data | The document / record data to insert. |
Example usage
use surrealdb::Surreal;
use surrealdb::engine::remote::ws::Ws;
use surrealdb::opt::auth::Root;
use surrealdb_types::SurrealValue;
#[derive(Debug, SurrealValue, Default)]
struct Person {
name: Option<String>,
company: Option<String>,
settings: Option<Settings>,
}
#[derive(Debug, SurrealValue)]
struct Settings {
active: bool,
marketing: bool,
}
#[derive(Debug, SurrealValue)]
struct Company {
company: String,
}
#[tokio::main]
async fn main() -> surrealdb::Result<()> {
let db = Surreal::new::<Ws>("127.0.0.1:8000").await?;
db.signin(Root {
username: "root".to_string(),
password: "secret".to_string(),
})
.await?;
db.use_ns("main").use_db("main").await?;
db.query("CREATE person:tobie, person:jaime").await?;
let people: Vec<Person> = db
.update("person")
.content(Company {
company: "SurrealDB".into(),
})
.await?;
dbg!(people);
Ok(())
}
Translated query
This function will run the following query in the database:
UPDATE $resource CONTENT $data;
.update().merge()
Modifies all records in a table, or a specific record, in the database.
Method Syntax
db.update(resource).merge(data)
This function merges the current document / record data with the specified data.
Arguments
| Argument | Description |
|---|
resource | The table name or the specific record ID to create. |
data | resource | The document / record data to insert. |
Example usage
use surrealdb::Surreal;
use surrealdb::engine::remote::ws::Ws;
use surrealdb::opt::auth::Root;
use surrealdb_types::SurrealValue;
#[derive(Debug, SurrealValue, Default)]
struct Person {
name: String,
company: Option<String>,
active: Option<bool>,
marketing: Option<bool>,
}
#[derive(Debug, SurrealValue)]
struct Settings {
active: bool,
marketing: bool,
}
#[derive(Debug, SurrealValue)]
struct Company {
company: String,
}
#[tokio::main]
async fn main() -> surrealdb::Result<()> {
let db = Surreal::new::<Ws>("127.0.0.1:8000").await?;
db.signin(Root {
username: "root".to_string(),
password: "secret".to_string(),
})
.await?;
db.use_ns("ns").use_db("db").await?;
db.query("CREATE person:tobie SET name = 'Tobie'; CREATE person:jaime SET name = 'jaime';")
.await?;
let people: Vec<Person> = db
.update("person")
.merge(Company {
company: "SurrealDB".into(),
})
.await?;
dbg!(people);
let person: Option<Person> = db
.update(("person", "jaime"))
.merge(Settings {
active: true,
marketing: true,
})
.await?;
dbg!(person);
Ok(())
}
Translated query
This function will run the following query in the database:
UPDATE $resource MERGE $data;
.update().patch()
Applies JSON Patch changes to all records, or a specific record, in the database.
Method Syntax
db.update(resource).patch(patch_op)
This function patches the current document / record data with the specified JSON Patch data.
Arguments
| Argument | Description |
|---|
resource | The table name or the specific record ID to modify. |
data | The JSON Patch data with which to modify the records. |
Example usage
The .patch() method uses a struct called a PatchOp that contains the four methods add(), change(), remove(), and replace(). Each of these methods takes different arguments depending on the operation. For example, PathOp::remove() only takes a single argument (a path), while PathOp::replace() takes a second value for the replacement value.
use surrealdb::Surreal;
use surrealdb::engine::remote::ws::Ws;
use surrealdb::opt::PatchOp;
use surrealdb::opt::auth::Root;
use surrealdb_types::{Datetime, SurrealValue};
#[derive(Debug, SurrealValue, Default)]
struct Person {
name: String,
company: Option<String>,
settings: Option<Settings>,
created_at: Option<Datetime>,
tags: Option<Vec<String>>,
}
#[derive(Debug, SurrealValue)]
struct Settings {
active: bool,
}
#[tokio::main]
async fn main() -> surrealdb::Result<()> {
let db = Surreal::new::<Ws>("127.0.0.1:8000").await?;
db.signin(Root {
username: "root".to_string(),
password: "secret".to_string(),
})
.await?;
db.use_ns("main").use_db("main").await?;
db.query(
"
CREATE person:tobie SET name = 'Tobie', company = 'SurrealDB';
CREATE person:jaime SET name = 'jaime', company = 'SurrealDB';",
)
.await?;
let people: Vec<Person> = db
.update("person")
.patch(PatchOp::replace("/created_at", Datetime::default()))
.await?;
dbg!(people);
let person: Option<Person> = db
.update(("person", "tobie"))
.patch(PatchOp::replace("/settings/active", false))
.patch(PatchOp::add("/tags", ["developer", "engineer"]))
.patch(PatchOp::remove("/company"))
.await?;
dbg!(person);
Ok(())
}
Translated query
This function will run the following query in the database:
UPDATE $resource PATCH $data;
See also
Update all or specific records in the database.
Method Syntax
db.update(resource)
The .update() method is followed by second method that refers to the type of update to use: an update with .content(), .merge(), or .patch().
.update().content()
Updates all records in a table, or a specific record, in the database.
Method Syntax
db.update(resource).content(data)
This function replaces the current document / record data with the specified data.
Arguments
| Argument | Type | Description |
|---|
resource | The table name or the specific record ID to create. |
data | The document / record data to insert. |
Example usage
use serde::{Deserialize, Serialize};
use surrealdb::engine::remote::ws::Ws;
use surrealdb::opt::auth::Root;
use surrealdb::Surreal;
#[derive(Debug, Serialize, Deserialize, Default)]
struct Person {
name: Option<String>,
company: Option<String>,
settings: Option<Settings>,
}
#[derive(Debug, Serialize, Deserialize)]
struct Settings {
active: bool,
marketing: bool,
}
#[derive(Debug, Serialize)]
struct Company {
company: String,
}
#[tokio::main]
async fn main() -> surrealdb::Result<()> {
let db = Surreal::new::<Ws>("127.0.0.1:8000").await?;
db.signin(Root {
username: "root",
password: "secret",
})
.await?;
db.use_ns("ns").use_db("db").await?;
db.query("CREATE person:tobie, person:jaime").await?;
let people: Vec<Person> = db
.update("person")
.content(Company {
company: "SurrealDB".into(),
})
.await?;
dbg!(people);
Ok(())
}
Translated query
This function will run the following query in the database:
UPDATE $resource CONTENT $data;
.update().merge()
Modifies all records in a table, or a specific record, in the database.
Method Syntax
db.update(resource).merge(data)
This function merges the current document / record data with the specified data.
Arguments
| Argument | Description |
|---|
resource | The table name or the specific record ID to create. |
data | resource | The document / record data to insert. |
Example usage
use serde::{Deserialize, Serialize};
use surrealdb::engine::remote::ws::Ws;
use surrealdb::opt::auth::Root;
use surrealdb::Surreal;
#[derive(Debug, Serialize, Deserialize, Default)]
struct Person {
name: String,
company: Option<String>,
active: Option<bool>,
marketing: Option<bool>,
}
#[derive(Debug, Serialize, Deserialize)]
struct Settings {
active: bool,
marketing: bool,
}
#[derive(Debug, Serialize)]
struct Company {
company: String,
}
#[tokio::main]
async fn main() -> surrealdb::Result<()> {
let db = Surreal::new::<Ws>("127.0.0.1:8000").await?;
db.signin(Root {
username: "root",
password: "secret",
})
.await?;
db.use_ns("ns").use_db("db").await?;
db.query("CREATE person:tobie SET name = 'Tobie'; CREATE person:jaime SET name = 'jaime';")
.await?;
let people: Vec<Person> = db
.update("person")
.merge(Company {
company: "SurrealDB".into(),
})
.await?;
dbg!(people);
let person: Option<Person> = db
.update(("person", "jaime"))
.merge(Settings {
active: true,
marketing: true,
})
.await?;
dbg!(person);
Ok(())
}
Translated query
This function will run the following query in the database:
UPDATE $resource MERGE $data;
.update().patch()
Applies JSON Patch changes to all records, or a specific record, in the database.
Method Syntax
db.update(resource).patch(patch_op)
This function patches the current document / record data with the specified JSON Patch data.
Arguments
| Argument | Description |
|---|
resource | The table name or the specific record ID to modify. |
data | The JSON Patch data with which to modify the records. |
Example usage
The .patch() method uses a struct called a PatchOp that contains the four methods add(), change(), remove(), and replace(). Each of these methods takes different arguments depending on the operation. For example, PathOp::remove() only takes a single argument (a path), while PathOp::replace() takes a second value for the replacement value.
use serde::{Deserialize, Serialize};
use surrealdb::engine::remote::ws::Ws;
use surrealdb::opt::auth::Root;
use surrealdb::opt::PatchOp;
use surrealdb::sql::Datetime;
use surrealdb::Surreal;
#[derive(Debug, Serialize, Deserialize, Default)]
struct Person {
name: String,
company: Option<String>,
settings: Option<Settings>,
created_at: Option<Datetime>,
tags: Option<Vec<String>>,
}
#[derive(Debug, Serialize, Deserialize)]
struct Settings {
active: bool,
}
#[tokio::main]
async fn main() -> surrealdb::Result<()> {
let db = Surreal::new::<Ws>("127.0.0.1:8000").await?;
db.signin(Root {
username: "root",
password: "secret",
})
.await?;
db.use_ns("ns").use_db("db").await?;
db.query(
"
CREATE person:tobie SET name = 'Tobie', company = 'SurrealDB';
CREATE person:jaime SET name = 'jaime', company = 'SurrealDB';",
)
.await?;
let people: Vec<Person> = db
.update("person")
.patch(PatchOp::replace("/created_at", Datetime::default()))
.await?;
dbg!(people);
let person: Option<Person> = db
.update(("person", "tobie"))
.patch(PatchOp::replace("/settings/active", false))
.patch(PatchOp::add("/tags", &["developer", "engineer"]))
.patch(PatchOp::remove("/company"))
.await?;
dbg!(person);
Ok(())
}
Translated query
This function will run the following query in the database:
UPDATE $resource PATCH $data;
See also