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

jak uzyskać kombinacje elementów w polu tablicy w MongoDB?

Jeśli dobrze zrozumiałem Twoją relację z podanego przykładu - to zapytanie powinno być rozwiązaniem Twojego problemu:

db.collection.aggregate([{
            $unwind : "$keywords"
        }, {
            $lookup : {
                from : "collection",
                localField : "_id",
                foreignField : "_id",
                as : "items"
            }
        }, {
            $unwind : "$items"
        }, {
            $unwind : "$items.keywords"
        }, {
            $redact : {
                $cond : {
                    if  : {
                        $cmp : ["$keywords", "$items.keywords"]
                    },
                then : "$$DESCEND",
                else  : "$$PRUNE"
            }
        }
    }, {
        $group : {
            _id : {
                k1 : "$keywords",
                k2 : "$items.keywords",
            },
            items : {
                $sum : 0.5
            }
        }
    }, {
        $sort : {
            "_id" : 1
        }
    }, {
        $project : {
            _id : 1,
            items : 1,
            a : {
                $cond : {
                    if  : {
                        $eq : [{
                                $cmp : ["$_id.k1", "$_id.k2"]
                            }, 1]
                    },
                then : "$_id.k2",
                else  : "$_id.k1"
            }
        },
        b : {
            $cond : {
                if  : {
                    $eq : [{
                            $cmp : ["$_id.k1", "$_id.k2"]
                        }, -1]
                },
            then : "$_id.k2",
            else  : "$_id.k1"
        }
    },

}
}, {
    $group : {
        _id : {
            k1 : "$a",
            k2 : "$b",
        },
        items : {
            $sum : "$items"
        }
    }
}, {
    $project : {
        _id : 0,
        item1 : "$_id.k1",
        item2 : "$_id.k2",
        count : "$items"
    }
}
])
{
    "item1" : "cs",
    "item2" : "dd",
    "count" : 1.0
}
{
    "item1" : "cs",
    "item2" : "ee",
    "count" : 1.0
}
{
    "item1" : "cs",
    "item2" : "se",
    "count" : 2.0
}
{
    "item1" : "dd",
    "item2" : "se",
    "count" : 1.0
}
{
    "item1" : "ee",
    "item2" : "se",
    "count" : 1.0
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Węzeł - Mongoose 3.6 - Sortuj zapytanie z wypełnionym polem

  2. mongoDB :zmiana nazwy kolumny w kolekcji

  3. W Jongo, jak znaleźć wiele dokumentów z Mongodb według listy identyfikatorów?

  4. Jak zezwolić na dowolne dane JSON w dokumentach Mongoose?

  5. Jak używać operatora księgowego MongoDB w kodzie C#?