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

Вземете документи с етикети в списъка, подредени по общ брой съвпадения

Както отговорих в В MongoDB търсене в масив и сортиране по брой съвпадения

Възможно е с помощта на Aggregation Framework.

Предположения

  • tags атрибутът е набор (без повтарящи се елементи)

Запитване

Този подход ви принуждава да развиете резултатите и да преоцените предиката на съвпадението с неразвъртени резултати, така че е наистина неефективен.

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

Очаквани резултати

{
    "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. Как да получите достъп до вече съществуваща колекция с Mongoose?

  2. PHP не може да намери драйвер за MongoDB

  3. Можете ли да поставите mongo $push преди вместо добавяне?

  4. Как да заредя база данни mongo с помощта на docker-compose?

  5. множество копия на Mongo DB на един и същ сървър