sql >> Database >  >> NoSQL >> MongoDB

MongoDB opzoeken wanneer buitenlands veld een array is

U kunt $lookup gebruiken met aangepaste pijplijn die je 0 . geeft of 1 resultaat en gebruik vervolgens $size om een ​​array om te zetten in een enkele booleaanse waarde:

db.reports.aggregate([
    {
        $lookup: {
            from: "users",
            let: { report_id: "$_id" },
            pipeline: [
                {
                    $match: {
                        $expr: {
                            $and: [
                                { $eq: [ "$name", "Mike" ] },
                                { $in: [ "$$report_id", "$favorites" ] }
                            ]
                        }
                    }
                }
            ],
            as: "users"
        }
    },
    {
        $project: {
            _id: 1,
            name: 1,
            favorite: { $eq: [ { $size: "$users" }, 1 ] }
        }
    }
])

Als alternatief, als u MongoDB-versie lager dan 3.6 moet gebruiken, kunt u de normale $lookup gebruiken en gebruik dan $filter om alleen die gebruikers te krijgen waar name is Mike :

db.reports.aggregate([
    {
        $lookup: {
            from: "users",
            localField: "_id",
            foreignField: "favorites",
            as: "users"
        }
    },
    {
        $project: {
            _id: 1,
            name: 1,
            favorite: { $eq: [ { $size: { $filter: { input: "$users", as: "u", cond: { $eq: [ "$$u.name", "Mike" ] } } } }, 1 ] }
        }
    }
])


  1. mongodb Kan $pull/$pullAll-modifier niet toepassen op niet-array, hoe array-element te verwijderen

  2. meerdere documenten invoegen met behulp van mongoengine in mongodb

  3. mongodb 3.4.3 Toestemming geweigerd wiredtiger_kv_engine.cpp 267 fout met ubuntu 16

  4. Wat kunnen de voor- en nadelen zijn van Embedded Arrays VS platte documenten in Mongodb?