MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Geonear сортиране по разстояние и време

Правилната заявка за използване тук използва рамката за агрегиране който има $geoNear етап на тръбопровод, за да помогне с това. Това е и единственото място, където можете да „сортирате“ по множество ключове, тъй като за съжаление „геопространственият“ $nearSphere няма "мета" проекция за "разстояние" като $text има "резултат".

Също така geoNear Командата за база данни, която използвате, също не може да се използва с "курсор" .sort() или по този начин.

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

Това е еквивалентът на това, което се опитвате да направите.

С рамката за агрегиране използвате "тръбопроводни оператори" вместо "модификатори на курсора", за да правите неща като $sort , $skip и $limit . Също и тезатрябва да бъде в логически ред, докато модификаторите на курсора обикновено го правят.

Това е "тръбопровод", точно като "Unix pipe". |

Също така внимавайте с "maxDistance" и "distanceMuliplier". Тъй като вашите координати са в „наследени двойки координати“, а не в GeoJSON формат, тогава разстоянията се измерват в "радиани". Ако имате GeoJSON съхранени данни за местоположение, тогава резултатът се връща в "метри".




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Обобщено групиране по дата с отместване на лятното часово време

  2. Как да получите размера на един документ в Mongodb?

  3. MongoDB $toString

  4. как да освободя кеширането, което се използва от Mongodb?

  5. Логическо ИЛИ за две различни полета в $where заявки в mongodb