33个版本 (8个重大更新)

0.9.16 2024年7月24日
0.9.12 2024年6月28日
0.9.0 2024年3月27日

网络编程中排名第1993

Download history • Rust 包仓库 233/week @ 2024-04-16 • Rust 包仓库 247/week @ 2024-04-23 • Rust 包仓库 230/week @ 2024-04-30 • Rust 包仓库 230/week @ 2024-05-07 • Rust 包仓库 81/week @ 2024-05-14 • Rust 包仓库 216/week @ 2024-05-21 • Rust 包仓库 240/week @ 2024-05-28 • Rust 包仓库 282/week @ 2024-06-04 • Rust 包仓库 278/week @ 2024-06-11 • Rust 包仓库 255/week @ 2024-06-18 • Rust 包仓库 234/week @ 2024-06-25 • Rust 包仓库 260/week @ 2024-07-02 • Rust 包仓库 246/week @ 2024-07-09 • Rust 包仓库 201/week @ 2024-07-16 • Rust 包仓库 284/week @ 2024-07-23 • Rust 包仓库 84/week @ 2024-07-30 • Rust 包仓库

每月下载量883

MIT/Apache

89KB
406 代码行

firestore-structured-query

Firestore StructuredQuery构建器。

ci crates.io docs.rs license

示例

use firestore_structured_query::{FieldPath, Filter, Query};
use google_api_proto::google::firestore::v1::{
    structured_query, value::ValueType, ArrayValue, Cursor, StructuredQuery, Value,
};

let _ = StructuredQuery::from(
    // or Query::collection_group(...)
    Query::collection("collection_id1")
        .select([FieldPath::raw("field1"), FieldPath::raw("field2")])
        .r#where(Filter::and([
            // field filters
            FieldPath::raw("field1").less_than(Value { value_type: Some(ValueType::IntegerValue(1)) })?,
            FieldPath::raw("field2").less_than_or_equal(Value { value_type: Some(ValueType::IntegerValue(2)) })?,
            FieldPath::raw("field3").greater_than(Value { value_type: Some(ValueType::IntegerValue(3)) })?,
            FieldPath::raw("field4").greater_than_or_equal(Value { value_type: Some(ValueType::IntegerValue(4)) })?,
            FieldPath::raw("field5").equal(Value { value_type: Some(ValueType::IntegerValue(5)) })?,
            FieldPath::raw("field6").not_equal(Value { value_type: Some(ValueType::IntegerValue(6)) })?,
            FieldPath::raw("field7").array_contains(Value { value_type: Some(ValueType::IntegerValue(7)) })?,
            FieldPath::raw("field8").r#in(Value { value_type: Some(ValueType::ArrayValue(ArrayValue { values: vec![Value { value_type: Some(ValueType::IntegerValue(8)) }] })) })?,
            FieldPath::raw("field9").array_contains_any(Value { value_type: Some(ValueType::ArrayValue(ArrayValue { values: vec![Value { value_type: Some(ValueType::IntegerValue(9)) }] })) })?,
            FieldPath::raw("field10").not_in(Value { value_type: Some(ValueType::ArrayValue(ArrayValue { values: vec![Value { value_type: Some(ValueType::IntegerValue(10)) }] })) })?,
            // unary filters
            FieldPath::raw("field11").is_nan()?,
            FieldPath::raw("field12").is_not_nan()?,
            FieldPath::raw("field13").is_not_null()?,
            FieldPath::raw("field14").is_null()?,
            // composite filters
            Filter::and([
                FieldPath::raw("f").equal(Value { value_type: Some(ValueType::StringValue("a".to_string())) })?,
                FieldPath::raw("f").equal(Value { value_type: Some(ValueType::StringValue("b".to_string())) })?,
            ]),
            Filter::or([
                FieldPath::raw("f").equal(Value { value_type: Some(ValueType::StringValue("a".to_string())) })?,
                FieldPath::raw("f").equal(Value { value_type: Some(ValueType::StringValue("b".to_string())) })?,
            ]),
        ]))
        .order_by([
            FieldPath::raw("field1").ascending(),
            FieldPath::raw("field2").descending(),
        ])
        // .start_after(...)
        .start_at([
            Value { value_type: Some(ValueType::IntegerValue(1))},
            Value { value_type: Some(ValueType::IntegerValue(2))},
        ])
        // .end_before(...)
        .end_at([
            Value { value_type: Some(ValueType::IntegerValue(1))},
            Value { value_type: Some(ValueType::IntegerValue(2))},
        ])
        .offset(1_i32)
        .limit(2_i32),
);

// If "serde" feature is enabled.
use firestore_structured_query::to_value;
let _ = StructuredQuery::from(
    // or Query::collection_group(...)
    Query::collection("collection_id1")
        .select([FieldPath::raw("field1"), FieldPath::raw("field2")])
        .r#where(Filter::and([
            // field filters
            FieldPath::raw("field1").less_than(&1)?,
            FieldPath::raw("field2").less_than_or_equal(&2)?,
            FieldPath::raw("field3").greater_than(&3)?,
            FieldPath::raw("field4").greater_than_or_equal(&4)?,
            FieldPath::raw("field5").equal(&5)?,
            FieldPath::raw("field6").not_equal(&6)?,
            FieldPath::raw("field7").array_contains(&7)?,
            FieldPath::raw("field8").r#in(&[8])?,
            FieldPath::raw("field9").array_contains_any(&[9])?,
            FieldPath::raw("field10").not_in(&[10])?,
            // unary filters
            FieldPath::raw("field11").is_nan()?,
            FieldPath::raw("field12").is_not_nan()?,
            FieldPath::raw("field13").is_not_null()?,
            FieldPath::raw("field14").is_null()?,
            // composite filters
            Filter::and([
                FieldPath::raw("f").equal(&"a")?,
                FieldPath::raw("f").equal(&"b")?,
            ]),
            Filter::or([
                FieldPath::raw("f").equal(&"a")?,
                FieldPath::raw("f").equal(&"b")?,
            ]),
        ]))
        .order_by([
            FieldPath::raw("field1").ascending(),
            FieldPath::raw("field2").descending(),
        ])
        // .start_after(...)
        .start_at([
            to_value(&1)?,
            to_value(&2)?
        ])
        // .end_before(...)
        .end_at([
            to_value(&1)?,
            to_value(&2)?,
        ])
        .offset(1_i32)
        .limit(2_i32),
);

版本矩阵

firestore-structured-query google-api-proto tonic
<0.7.0 (未知) (未知)
>=0.7.0, <0.9.0 >=1.516.0, <1.557.0 0.11.x
>=0.9.0 >=1.557.0 0.11.x

待办事项

  • StructuredQuery::find_nearest支持

依赖项

~73MB
~1M SLoC