DataStax Document API Swagger UI 中显示的 Swagger 文档中的内容是什么a JSON blob with search filters, allowed operators: $eq, $ne, $in, $nin, $gt, $lt, $gte, $lte, $exists
,没有记录,所以我想问一下查询字符串是否基于 MongoDB?
问问题
136 次
2 回答
5
查询字符串在本质上与您在 Mongo 中找到的非常相似。
以下是一些示例 where 子句给出一个想法:
{"name": {"$eq": "Eric"}}
- 很简单,匹配name
具有值的字段的文档Eric
{"a.age": {"$gt": 0}}
- 您还可以引用文档中的嵌套字段
{"friends.[0].name": {"$in": ["Cassandra"]}}
- 使用 引用数组元素[]
,如果文档的第一个朋友名为 Cassandra,这将匹配。
{"friends.*.age": {"$gte": 24}}
- 通配符*
可用于匹配数组中的任何元素,或特定嵌套级别的任何字段。这匹配任何年龄 >= 24 的朋友。
于 2021-04-20T14:53:59.673 回答
5
在 Cassandra 上公开的 Document API 由开源项目Stargate提供,该项目确实由 Datastax 开发并嵌入到他们的 Saas 解决方案Astra中。
您创建的 JSON 查询字符串在后台被解析并转换为适当的 CQL 查询。
源代码不会说谎,你可以在这里找到完整的代码和专门解析 where 子句的这里
public List<FilterCondition> convertToFilterOps(
List<PathSegment> prependedPath,
JsonNode filterJson) {
List<FilterCondition> conditions = new ArrayList<>();
if (!filterJson.isObject()) {
throw new DocumentAPIRequestException("Search was expecting a JSON object as input.");
}
ObjectNode input = (ObjectNode) filterJson;
Iterator<String> fields = input.fieldNames();
while (fields.hasNext()) {
String fieldName = fields.next();
if (fieldName.isEmpty()) {
throw new DocumentAPIRequestException(
"The field(s) you are searching for can't be the empty string!");
}
...
于 2021-04-20T09:13:33.843 回答