繁体   English   中英

在 POSTGRES 中为几何体编写 sequelize 查询

[英]Writing sequelize queries for geometries in POSTGRES

我有以下查询并想将其写为 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 coordinates <-> 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'],
  ],
});

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

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']]
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM