sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDb $addFields och $match

Nästa gång lägg till ett exempel på ditt dokument så att andra kan återskapa ditt problem. Med det sagt så ser jag inte var ditt problem ligger. Jag skapade lite data för att återskapa ditt användningsfall. Så jag lade till följande dokument:

{ 
    "_id" : ObjectId("5a0d5d376c9b762a7c035ec4"), 
    "projectName" : "some stack test", 
    "price" : NumberInt(45), 
    "propertyId" : {
        "prefix" : "a", 
        "number" : "7"
    }
}

Sedan körde jag ditt skript (utan sorten) och det fungerar bra:

db.yourCollectionName.aggregate([
    {
        $project: {
            "projectName": 1,
            "price": 1,
            "document": '$$ROOT'
        }
    },
    {
        $addFields: {
            "document.id": {
                $concat: ['$document.propertyId.prefix', '$document.propertyId.number']
            }
        }
    },
    {
        $match: {
            $and: [{
                $or: [{
                        "projectName": {
                            $regex: '.*' + "some stack test"
                        }
                    },

                    {
                        "document.id": {
                            $regex: '.*' + "a" + '.*',
                            $options: "7"
                        }
                    }
                ]
            }]

        }
    },
    {
        $replaceRoot: {
            newRoot: "$document"
        }
    }
])

Att du inte får några resultat beror förmodligen på dina förfrågningsparametrar. Förutom hur kan "projectName" har samma sökparametrar som din "document.id" Matchar de ens? Kontrollera din matchpipeline igen:

{"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},       
{'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}



  1. mongo - ruby ​​anslutningsproblem

  2. uppdatera flera element i array mongodb

  3. Strategier för realtidsaggregationer i MongoDB

  4. Är det bästa Java-praxis att lagra datum så länge i din databas?