【问题标题】:Writing sequelize queries for geometries in POSTGRES在 POSTGRES 中为几何编写 sequelize 查询
【发布时间】:2021-10-16 21:04:04
【问题描述】:

我有以下查询,并想将其写为 sequelize 查询

`SELECT "Gigs"."id",
                        "gigType",
                        "gigCategory",
                        "gigTitle",
                        "gigDescription",
                        "minOrderAmount",
                        unit,
                        "unitPrice",
                        stock,
                        sold,
                        "expireDate",
                        "Gigs".userid                                                 AS "sellerId",
                        "growerType"                                                  AS "sellerType",
                        "points",
                        json_build_object('id', "locationId", 'lat', lat, 'lng', lng) AS location
                 FROM (SELECT DISTINCT ON ("gigid") "gigid", "locationId", lat, lng
                       FROM (SELECT "gigid",
                                    id                          as "locationId",
                                    st_x(coordinates::geometry) as lat,
                                    st_y(coordinates::geometry) as lng
                             FROM "Locations"
                             WHERE ST_DWithin(coordinates,
                                              ST_MakePoint(${location.lat}, ${location.lng})::geography,
                                              ${distance})
                             ORDER BY coordinates <-> ST_MakePoint(${location.lat}, ${location.lng})::geography
                             LIMIT ${limit}) AS nearGigIds) AS distinctGigIds
                          INNER JOIN "Gigs"
                                     ON distinctGigIds."gigid" = "Gigs"."id"
                          INNER JOIN "Users" U
                                     ON U.id = "Gigs".userid
                          INNER JOIN "Customers" C on U.id = C.userid
                          INNER JOIN "Growers" G on C.userid = G.userid
                 WHERE "expireDate" > ${today}::text::date
                 ORDER BY points DESC
                 OFFSET ${offset} LIMIT 10;`

我想知道如何在查询中编写 ORDER BY 坐标 ST_MakePoint(${location.lat}, ${location.lng})::geography 部分。我参考了文档,有一种方法可以在 ORDER BY 中编写函数,如下所示。

  order: [
    // Will order by  otherfunction(`col1`, 12, 'lalala') DESC
    [sequelize.fn('otherfunction', sequelize.col('col1'), 12, 'lalala'), 'DESC'],
  ],
});

但是我对如何写这样的上述部分感到困惑。

【问题讨论】:

    标签: sql node.js postgresql sequelize.js postgis


    【解决方案1】:
    db.Table.findAll({
        attributes: {
            include: [
                [
                    Sequelize.fn(
                        'ST_Distance',
                        Sequelize.fn('point', Sequelize.col('longitude'), Sequelize.col('latitude')),
                        Sequelize.fn('point', longitude, latitude),
                    ),
                    'distanceAttribute',
                ],
            ],
        },
        order:[['distanceAttribute', 'DESC']]
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多