Struct bonsaidb_core::connection::View  
source · pub struct View<'a, Cn, V: SerializedView, Key>{
    pub key: Option<QueryKey<'a, V::Key, Key>>,
    pub access_policy: AccessPolicy,
    pub sort: Sort,
    pub limit: Option<u32>,
    /* private fields */
}Expand description
Parameters to query a schema::View.
The examples for this type use this view definition:
use bonsaidb_core::define_basic_unique_mapped_view;
use bonsaidb_core::document::{CollectionDocument, Emit};
use bonsaidb_core::schema::{
    CollectionMapReduce, DefaultViewSerialization, Name, ReduceResult, View, ViewMapResult,
    ViewMappedValue, ViewSchema,
};
#[derive(Debug, Clone, View, ViewSchema)]
#[view(collection = MyCollection, key = u32, value = f32, name = "scores-by-rank")]
pub struct ScoresByRank;
impl CollectionMapReduce for ScoresByRank {
    fn map<'doc>(
        &self,
        document: CollectionDocument<<Self::View as View>::Collection>,
    ) -> ViewMapResult<'doc, Self::View> {
        document
            .header
            .emit_key_and_value(document.contents.rank, document.contents.score)
    }
    fn reduce(
        &self,
        mappings: &[ViewMappedValue<'_, Self::View>],
        rereduce: bool,
    ) -> ReduceResult<Self::View> {
        if mappings.is_empty() {
            Ok(0.)
        } else {
            Ok(mappings.iter().map(|map| map.value).sum::<f32>() / mappings.len() as f32)
        }
    }
}Fields§
§key: Option<QueryKey<'a, V::Key, Key>>Key filtering criteria.
access_policy: AccessPolicyThe view’s data access policy. The default value is AccessPolicy::UpdateBefore.
sort: SortThe sort order of the query.
limit: Option<u32>The maximum number of results to return.
Implementations§
source§impl<'a, Cn, V, Key> View<'a, Cn, V, Key>where
    V::Key: Borrow<Key> + PartialEq<Key>,
    V: SerializedView,
    Cn: Connection,
    Key: KeyEncoding<V::Key> + PartialEq + ?Sized,
 
impl<'a, Cn, V, Key> View<'a, Cn, V, Key>where
    V::Key: Borrow<Key> + PartialEq<Key>,
    V: SerializedView,
    Cn: Connection,
    Key: KeyEncoding<V::Key> + PartialEq + ?Sized,
sourcepub fn with_key<K>(self, key: &'a K) -> View<'a, Cn, V, K>
 
pub fn with_key<K>(self, key: &'a K) -> View<'a, Cn, V, K>
Filters for entries in the view with key.
// score is an f32 in this example
for mapping in ScoresByRank::entries(&db).with_key(&42).query()? {
    assert_eq!(mapping.key, 42);
    println!("Rank {} has a score of {:3}", mapping.key, mapping.value);
}sourcepub fn with_keys<K, IntoIter: IntoIterator<Item = &'a K>>(
    self,
    keys: IntoIter
) -> View<'a, Cn, V, K>
 
pub fn with_keys<K, IntoIter: IntoIterator<Item = &'a K>>( self, keys: IntoIter ) -> View<'a, Cn, V, K>
Filters for entries in the view with keys.
// score is an f32 in this example
for mapping in ScoresByRank::entries(&db).with_keys(&[42, 43]).query()? {
    println!("Rank {} has a score of {:3}", mapping.key, mapping.value);
}sourcepub fn with_key_range<K, R>(self, range: R) -> View<'a, Cn, V, K>
 
pub fn with_key_range<K, R>(self, range: R) -> View<'a, Cn, V, K>
Filters for entries in the view with the range keys.
// score is an f32 in this example
for mapping in ScoresByRank::entries(&db).with_key_range(42..).query()? {
    assert!(mapping.key >= 42);
    println!("Rank {} has a score of {:3}", mapping.key, mapping.value);
}sourcepub fn with_key_prefix<K>(self, prefix: &'a K) -> View<'a, Cn, V, K>where
    K: KeyEncoding<V::Key> + IntoPrefixRange<'a, V::Key> + PartialEq + ?Sized,
    V::Key: Borrow<K> + PartialEq<K>,
 
pub fn with_key_prefix<K>(self, prefix: &'a K) -> View<'a, Cn, V, K>where
    K: KeyEncoding<V::Key> + IntoPrefixRange<'a, V::Key> + PartialEq + ?Sized,
    V::Key: Borrow<K> + PartialEq<K>,
Filters for entries in the view with keys that begin with prefix.
#[derive(View, Debug, Clone)]
#[view(name = "by-name", key = String, collection = MyCollection)]
struct ByName;
// score is an f32 in this example
for mapping in ByName::entries(&db).with_key_prefix("a").query()? {
    assert!(mapping.key.starts_with("a"));
    println!("{} in document {:?}", mapping.key, mapping.source);
}sourcepub const fn with_access_policy(self, policy: AccessPolicy) -> Self
 
pub const fn with_access_policy(self, policy: AccessPolicy) -> Self
Sets the access policy for queries.
// score is an f32 in this example
for mapping in ScoresByRank::entries(&db)
    .with_access_policy(AccessPolicy::UpdateAfter)
    .query()?
{
    println!("Rank {} has a score of {:3}", mapping.key, mapping.value);
}sourcepub const fn ascending(self) -> Self
 
pub const fn ascending(self) -> Self
Returns the matching mappings in ascending key order. This is the default sorting behavior.
When more than one mapping exists for a single key, all matching mappings are returned as a unique entry. The resulting mappings are sorted only by the key, and as such, the order of mappings with the same key is undefined.
// score is an f32 in this example
for mapping in ScoresByRank::entries(&db).ascending().query()? {
    println!("Rank {} has a score of {:3}", mapping.key, mapping.value);
}sourcepub const fn descending(self) -> Self
 
pub const fn descending(self) -> Self
Returns the matching mappings in descending key order.
When more than one mapping exists for a single key, all matching mappings are returned as a unique entry. The resulting mappings are sorted only by the key, and as such, the order of mappings with the same key is undefined.
// score is an f32 in this example
for mapping in ScoresByRank::entries(&db).descending().query()? {
    println!("Rank {} has a score of {:3}", mapping.key, mapping.value);
}sourcepub const fn limit(self, maximum_results: u32) -> Self
 
pub const fn limit(self, maximum_results: u32) -> Self
Sets the maximum number of results to return.
// score is an f32 in this example
let mappings = ScoresByRank::entries(&db).limit(10).query()?;
assert!(mappings.len() <= 10);sourcepub fn query(self) -> Result<ViewMappingsCurrent<V>, Error>
 
pub fn query(self) -> Result<ViewMappingsCurrent<V>, Error>
Executes the query and retrieves the results.
// score is an f32 in this example
for mapping in ScoresByRank::entries(&db).query()? {
    println!("Rank {} has a score of {:3}", mapping.key, mapping.value);
}sourcepub fn query_with_docs(self) -> Result<MappedDocuments<OwnedDocument, V>, Error>
 
pub fn query_with_docs(self) -> Result<MappedDocuments<OwnedDocument, V>, Error>
Executes the query and retrieves the results with the associated Documents.
for mapping in &ScoresByRank::entries(&db)
    .with_key_range(42..=44)
    .query_with_docs()?
{
    println!(
        "Mapping from #{} with rank: {} and score: {}. Document bytes: {:?}",
        mapping.document.header.id, mapping.key, mapping.value, mapping.document.contents
    );
}sourcepub fn query_with_collection_docs(
    self
) -> Result<MappedDocuments<CollectionDocument<V::Collection>, V>, Error>where
    V::Collection: SerializedCollection,
    <V::Collection as SerializedCollection>::Contents: Debug,
 
pub fn query_with_collection_docs(
    self
) -> Result<MappedDocuments<CollectionDocument<V::Collection>, V>, Error>where
    V::Collection: SerializedCollection,
    <V::Collection as SerializedCollection>::Contents: Debug,
Executes the query and retrieves the results with the associated CollectionDocuments.
for mapping in &ScoresByRank::entries(&db)
    .with_key_range(42..=44)
    .query_with_collection_docs()?
{
    println!(
        "Mapping from #{} with rank: {} and score: {}. Deserialized Contents: {:?}",
        mapping.document.header.id, mapping.key, mapping.value, mapping.document.contents
    );
}sourcepub fn reduce(self) -> Result<V::Value, Error>
 
pub fn reduce(self) -> Result<V::Value, Error>
Executes a reduce over the results of the query
// score is an f32 in this example
let score = ScoresByRank::entries(&db).reduce()?;
println!("Average score: {:3}", score);sourcepub fn reduce_grouped(self) -> Result<GroupedReductions<V>, Error>
 
pub fn reduce_grouped(self) -> Result<GroupedReductions<V>, Error>
Executes a reduce over the results of the query, grouping by key.
// score is an f32 in this example
for mapping in ScoresByRank::entries(&db).reduce_grouped()? {
    println!(
        "Rank {} has an average score of {:3}",
        mapping.key, mapping.value
    );
}sourcepub fn delete_docs(self) -> Result<u64, Error>
 
pub fn delete_docs(self) -> Result<u64, Error>
Deletes all of the associated documents that match this view query.
ScoresByRank::entries(&db).delete_docs()?;