【问题标题】:How to parse query syntax into DB query with grouping and precedence?如何将查询语法解析为具有分组和优先级的数据库查询?
【发布时间】:2021-10-08 22:53:55
【问题描述】:

假设,我有下面的字符串

((data eq 3) AND ((d gte 4) OR (f lt 5)))

如何将其转换为 Node.js/Javascript 中的以下 WHERE 子句,

SELECT * from <table-name> where count = 3 AND ((de >= 4) OR (fr < 5))

或 以 MongoDB 方式,

db.collection.find({
 $and: [
   {data: {$eq: 3}},
   {
     $or: [
       {d: {$gte: 4}},
       {f: {$lt: 5}}
     ]
   }

 ]
})

【问题讨论】:

    标签: javascript sql node.js mongodb data-structures


    【解决方案1】:

    不完全确定您要做什么,但我假设您的 SQL 子句将是一个字符串。

    let where = 'data = 3 AND ((d >= 4) OR (f < 5))';
    let table_name = 'test_db';
    let clause = `SELECT * from ${table_name} where ${where}`;
    console.log(clause)

    【讨论】:

    • 基本上我想解析它并根据需要使用。我会更新SQL部分来解释为什么我不能接受这个答案
    【解决方案2】:

    在对数据结构进行了一点探索之后,我想到了Binary Expression Tree

    这些是我已经完成的步骤,

    1. 将表达式拆分为标记
    2. Convert the tokens of infix format into postfix format
    3. Convert the postfix into Binary Expression Tree
    4. 从表达式树中,遍历并将其转换为所需的 MongoDB 查询

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多