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

Kolejność wyników w MongoDB z $in?

Ogólnie:jeśli szukasz bez określonej kolejności sortowania, nie ma gwarantowanej kolejności wyników.

Dodatkowo nie jest możliwe sortowanie według tablicy (a tym bardziej, jeśli chcesz posortować tablicę według tablicy, jak opisano). sortuj() używa logicznego porównania w celu określenia kolejności rosnącej lub malejącej na podstawie pola w dokumentach wynikowych.

Będziesz musiał zaimplementować dowolną pożądaną niestandardową logikę sortowania we własnym kodzie aplikacji.

Przydatnym podejściem może być skorzystanie z nowej Struktury agregacji w MongoDB 2.2 .. w szczególności możliwość $unwind tablicę w strumień dokumentów.

Na przykład konfigurowanie danych testowych jako:

{ "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
{ "_id" : ObjectId("504ac946b50571321b2f932b"), "a" : [ 5, 4, 9 ] }
{ "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
{ "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }

$in wyszukiwanie w [2,3] spowoduje wyświetlenie pasujących dokumentów:

> db.matches.find({'a': { $in: [2,3]}})
{ "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
{ "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
{ "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }

Dzięki frameworkowi agregacji możesz $match te same dokumenty, a następnie manipuluj wynikami, aby uzyskać podstawowe sortowanie:$unwind tablice, $sort je, a następnie $group te z powrotem do wyniku:

db.matches.aggregate(
  { $match : {
       a: { $in: [2,3] }
  }},
  { $unwind : "$a" },
  { $sort: {
      "a": -1
  }},
  { $group : {
      _id: '$_id',
      a: { $addToSet: "$a" }
  }}
)

W tym przykładzie dokumenty z pasującymi tablicami są teraz posortowane w porządku rosnącym dla wartości tablicy:

{
    "result" : [
        {
            "_id" : ObjectId("504ac94eb50571321b2f932c"),
            "a" : [ 1, 2, 3]
        },
        {
            "_id" : ObjectId("504ac93fb50571321b2f932a"),
            "a" : [ 1, 2, 4 ]
        },
        {
            "_id" : ObjectId("504ac954b50571321b2f932d"),
            "a" : [ 3, 7, 9 ]
        }
    ],
    "ok" : 1
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb ściąga wszystkie elementy z tablicy

  2. Instalowanie MongoDB na Raspberry Pi

  3. Node.js — tworzenie relacji z Mongoose

  4. Jak zrzucić całą bazę danych MongoDB jako text/json?

  5. $unset na wielu polach w mongodb