f0rb 最近的时间轴更新
f0rb

f0rb

V2EX 第 604644 号会员,加入于 2022-12-03 19:45:39 +08:00
f0rb 最近回复了
@VVVYGD "其实就是类似 SQL 解析"
看懂了,我做的东西和你不一样,
你做的是 SQL 转 MongoDB
我做的是对象转 SQL 或者 MongoDB 或者其他 NoSQL 语言
@VVVYGD 所以你这里每条查询都需要构造一次类似这样的条件是吧:#b" local="abc" && (xx=1 || b=2 && c=3)",那你这种怎么重用了,到处都是字符串吗?你这里不过是把 AND 换成&&,OR 换成||了,别的和 SQL 有什么区别呢?你并没有造出个新轮子,只是给旧轮子涂了层新漆。

你要考虑到做一个信息系统, 前端都会有多个输入框由用户填写查询条件进行搜索,而多个查询条件是可以任意组合的,只能靠 if 语句判断用户是否填写了某个条件来决定是否拼接对应的条件,不知道这种场景你是怎么处理的。

pub enum MongoOp {
Eq,
Gt,
Gte,
Lt,
Lte,
Ne,
Like,
NotLike, // { item: { $not: { $regex: "^p.*" } } }
In,
NotIn,
}

我看你这里都定义了这些谓词了,你直接把列名和他们拼接成 ageGt 这样,再解析成条件岂不是方便多了。
@VVVYGD 而且使用字符串不利于 IDE 的代码检查还有代码重构和复用
@VVVYGD 不一样哦,a > 1 对应 field(a, gt,1) 需要 3 个参数,而 aGt 只需要一个参数,值是跟着参数传进来
前后端传参也不一样的方式也不一样,aGt=1 对应 json 是{"aGt":1}, 或者是?aGt=1&b=2, 不太清楚你这个前端参数是怎么传的,我这也有个构造或语句的例子: https://juejin.cn/post/7409608924054700047
@RainCats 楼主是 JDK21 啊
@NikoXu 何出此言
你要是个人项目的话,看看 DoytoQuery ,通过定义对象来控制生成的 SQL 语句,上面那个 Comment 的例子大概可以这样写:

@SuperBuilder
public class CommentQuery extends PageQuery {
private List<Long> parentIdIn;
}

CommentQuery commentQuery = CommentQuery.builder().parentIdIn(list).sort("createdAt,DESC").build();
List<Comment> comments = dataQueryClient.query(commentQuery);

更复杂的查询示例还有 TPC-H 的 22 个用来对数据库进行性能测试的查询语句。
之前推广的比较佛系,所以估计没什么人了解。
前几天还在这里发了个帖子想问问有没有人搞过推广的,想先推下 Go 版本的试试。
之前在 BAT 一家干过,有个 C++的模块我到离职了都没编译成功过
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   987 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 15ms · UTC 18:57 · PVG 02:57 · LAX 11:57 · JFK 14:57
Developed with CodeLauncher
♥ Do have faith in what you're doing.