sql >> Database >  >> NoSQL >> MongoDB

hoe combinaties van items in een arrayveld in MongoDB te krijgen?

Als ik je relatie uit het gegeven voorbeeld goed heb begrepen, zou deze vraag een oplossing voor je probleem moeten zijn:

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. NestJS:hoe u op sessies gebaseerde gebruikersauthenticatie implementeert

  2. MongoDB Update array-element (document met een sleutel) indien aanwezig, anders push

  3. Sleutelwaardedatabase met Java-client

  4. 5 manieren om de milliseconden van een datum in MongoDB te krijgen