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

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

Да, възможно е с помощта на Aggregation Framework.

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

  • Наборът от данни, използван тук, е същият, използван в Get документи с етикети в списъка, подредени по общ брой съвпадения
  • 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. Как да настроите обема на данните на docker mongo

  2. Визуална статистика за вашия MongoDB сървър

  3. Правене на spring-data-mongodb като мулти-наемател

  4. MongoDB 4.2 Управление и наблюдение без блокиране на доставчик

  5. mongoexport без поле _id