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

Намерете дубликат в масива без $unwind

Можете да използвате $range за генериране на масиви от числа от 1 към n където n е $size от adds . След това можете да преминете през тези числа и да проверите дали adds в index ($arrayElemAt ) съществува някъде преди index ако да, тогава трябва да се счита за дубликат. Можете да използвате $indexOfArray за да проверите дали елементът съществува в масива, указващ 0 и index като диапазон на търсене.

Тогава просто трябва да използвате $project и $map за замяна на индекси с действителни елементи. Можете също да добавите $setUnion за да се избегнат дублиращи се дубликати в крайния набор от резултати.

db.users.aggregate([
    {
        $addFields: {
            duplicates: {
                $filter: {
                    input: { $range: [ 1, { $size: "$adds" } ] },
                    as: "index",
                    cond: {
                        $ne: [ { $indexOfArray: [ "$adds", { $arrayElemAt: [ "$adds", "$$index" ]  }, 0, "$$index" ] }, -1 ]
                    }
                }
            }
        }
    },
    {
        $project: {
            _id: 1,
            adds: {
                $setUnion: [ { $map: { input: "$duplicates", as: "d", in: { $arrayElemAt: [ "$adds", "$$d" ] } } }, [] ]
            }
        }
    }
])

Разпечатки:

{ "_id" : 1, "adds" : [ "111" ] }
{ "_id" : 2, "adds" : [ "555" ] }
{ "_id" : 3, "adds" : [ "888" ] }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Елемент на MongoDB Update Array

  2. Инсталиране на MongoDB на CentOS 7

  3. nodejs mongodb идентификатор на обект към низ

  4. Може ли kafka да се свърже - изходният код на mongo се изпълнява като клъстер (max.tasks> 1)

  5. Преобразувайте MongoDB BsonDocument в валиден JSON в C#