MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongodb znajdź porównując elementy tablicy

Ponieważ za każdym razem masz dokładny format pola (okrąg jest tablicą dwuelementową), możesz przekształcić je w ramach agregacji na dwa pola, a następnie porównać je w projekcji i dopasować, aby uzyskać z powrotem tylko elementy spełniające Twoje wymagania drugi element tablicy jest większy niż pierwszy element tablicy.

db.place.aggregate( [
      { $unwind : "$center" },
      { $group : { _id : "$_id", 
                   centerX : {$first:"$center"}, 
                   centerY : {$last:"$center"} 
      } },
      { $project : { YgtX : { $gt : [ "$centerY", "$centerX" ] } } },
      { $match : { YgtX : true } }
] );

Teraz, jeśli twoja tablica była arbitralną parą wartości liczbowych, możesz użyć powyższego.

W komentarzach powiedziałeś, że twoja para reprezentuje współrzędne (długość, szerokość) - pamiętaj, że w MongoDB pary współrzędnych są zawsze przechowywane tak długo, lat - jeśli twoje rzeczywiste wartości x, y były współrzędnymi w miejscu płaskim (w przeciwieństwie do sferycznego), możesz znaleźć wszystkie dokumenty, których współrzędna Y jest większa niż współrzędna X za pomocą pojedynczego zapytania geoprzestrzennego:

db.place.find( { center : { $geoWithin : { $geometry : {
                  type:"Polygon", 
                  coordinates:[[[50,50],[-50,50],[-50,-50],[50,50]]]
} } } } );

Powyższe zapytanie zakłada, że ​​twój układ współrzędnych rozciąga się od -50 do 50 wzdłuż X i Y i znajduje wszystkie punkty w trójkącie, który reprezentuje wszystkie współrzędne mające Y>=X.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Utwórz _id na poddokumentach w mongoimport --jsonArray

  2. ClusterControl — wszystkie najważniejsze funkcje i ulepszenia z 2017 roku

  3. Jak uzyskać listę kolekcji w manguście?

  4. Sprawdź, czy kolekcja MongoDB jest ograniczona sterownikiem .NET 2.0

  5. Jak przywrócić określoną kolekcję w MongoDB za pomocą logicznej kopii zapasowej?