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

Uzyskaj dokumenty z tagami na liście, uporządkowane według łącznej liczby dopasowań

Jak odpowiedziałem w In MongoDB szukaj w tablicy i sortuj według liczby dopasowań

Jest to możliwe dzięki Aggregation Framework.

Założenia

  • tags atrybut to zestaw (bez powtarzających się elementów)

Zapytanie

Takie podejście zmusza cię do rozwinięcia wyników i ponownej oceny predykatu dopasowania z nierozwiniętymi wynikami, więc jest to naprawdę nieefektywne.

db.test_col.aggregate(
    {$match: {tags: {$in: ["shirt","cotton","black"]}}}, 
    {$unwind: "$tags"}, 
    {$match: {tags: {$in: ["shirt","cotton","black"]}}},
    {$group: {
        _id:{"_id":1}, 
        matches:{$sum:1}
    }}, 
    {$sort:{matches:-1}}
);

Oczekiwane wyniki

{
    "result" : [
        {
            "_id" : {
                "_id" : ObjectId("5051f1786a64bd2c54918b26")
            },
            "matches" : 3
        },
        {
            "_id" : {
                "_id" : ObjectId("5051f1726a64bd2c54918b24")
            },
            "matches" : 2
        },
        {
            "_id" : {
                "_id" : ObjectId("5051f1756a64bd2c54918b25")
            },
            "matches" : 1
        }
    ],
    "ok" : 1
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Promuj podpola do najwyższego poziomu w projekcji bez wyświetlania wszystkich kluczy

  2. MongoDB $toLong

  3. Aplikacja Heroku ulega awarii po aktualizacji MongoDB do wersji 3.0

  4. Spring Data MongoDB Lookup z agregacją potoku

  5. Czy klauzula $in MongoDB gwarantuje kolejność?