簡體   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