MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wenn Mongo $lookup ein Left Outer Join ist, wie kommt es dann, dass es nicht übereinstimmende Dokumente ausschließt?

Dieses Verhalten hat nichts mit $lookup zu tun , weil das Standardverhalten für $unwind ist, Dokumente auszulassen, bei denen das referenzierte Feld fehlt oder ein leeres Array ist.

Um die abgewickelten Dokumente auch bei profile.universities aufzubewahren ein leeres Array ist, können Sie seine preserveNullAndEmptyArrays setzen Option auf true :

db.users.aggregate([
    {
        $unwind: "$profile",
        $unwind: {
            path: "$profile.universities",
            preserveNullAndEmptyArrays: true
        }
    },
    {
        $lookup: {
            from: "universities",
            localField: "profile.universities._id",
            foreignField: "_id",
            as: "profile.universities"
        }
    },
    {
        $group: {
            _id: "$_id",
            universities: {
                $addToSet: "$profile.universities"
            }
        }
    }
]).pretty()