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

MongoDb $addFields und $match

Fügen Sie beim nächsten Mal bitte ein Beispiel Ihres Dokuments hinzu, damit die Leute Ihr Problem reproduzieren können. Wie gesagt, ich verstehe nicht, wo dein Problem liegt. Ich habe einige Daten erstellt, um Ihren Anwendungsfall zu reproduzieren. Also habe ich das folgende Dokument hinzugefügt:

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

Dann habe ich Ihr Skript ausgeführt (ohne die Sortierung) und es funktioniert gut:

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"
        }
    }
])

Dass Sie keine Ergebnisse erhalten, liegt wahrscheinlich an Ihren Anfrageparametern. Außerdem wie kann der "projectName" dieselben Suchparameter haben wie Ihre "document.id" Stimmen sie überhaupt überein?Überprüfen Sie erneut Ihre Match-Pipeline:

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