sql >> Databáze >  >> NoSQL >> MongoDB

Geonear seřadit podle vzdálenosti a času

Správný dotaz, který se zde použije, používá rámec agregace který má $geoNear fáze potrubí, která s tím pomůže. Je to také jediné místo, kde můžete „řadit“ podle více klíčů, jako je bohužel „geoprostorové“ $nearSphere nemá "meta" projekci pro "vzdálenost" jako $text má "skóre".

Také geoNear databázový příkaz, který používáte, také nelze použít s "kurzorem" .sort() ani tímto způsobem.

db.paging.aggregate([
    { "$geoNear": {
        "near": [106.606033,29.575897 ],
        "spherical": true,
        "distanceField": "distance",
        "distanceMuliplier": 6371,
        "maxDistance": 1/6371
    }},
    { "$sort": { "distance": 1, "createdate": -1 } },
    { "$skip": ( 2-1 ) * 2 },
    { "$limit": 5 }
])

To je ekvivalent toho, o co se snažíte.

S agregačním rámcem používáte "pipeline operator" místo "modifikátorů kurzoru" dělat věci jako $sort , $skip a $limit . Také tyto musí být v logickém pořadí, zatímco modifikátory kurzoru to obecně vyřeší.

Je to "potrubí", stejně jako "Unix pipe". |

Pozor také na „maxDistance“ a „distanceMuliplier“. Protože vaše souřadnice jsou ve "starších párech souřadnic" a ne GeoJSON formátu, pak se vzdálenosti měří v "radiánech". Pokud máte uložená data o poloze GeoJSON, pak se výsledek vrátí v "metrech".




  1. Mongodb Agregation framework group a sort

  2. Nainstalujte phpredis MAC OSX

  3. Jak správně uložit časové pásmo pomocí Ruby a MongoId?

  4. Nelze vytvořit jmenný prostor v transakci s více dokumenty (MongoDB 4.0, Spring Data 2.1.0, Spring Boot)