MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDb $addFields e $match

La prossima volta aggiungi un campione del tuo documento in modo che le persone possano riprodurre il tuo problema. Detto questo non vedo dove sia il tuo problema. Ho creato alcuni dati per riprodurre il tuo caso d'uso. Quindi ho aggiunto il seguente documento:

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

Quindi ho eseguito il tuo script (senza l'ordinamento) e funziona bene:

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

Il fatto che non ottieni risultati è probabilmente dovuto ai parametri della tua richiesta. Inoltre come può il "projectName" hanno gli stessi parametri di ricerca del tuo "document.id" Corrispondono anche? Controlla di nuovo la tua pipeline di corrispondenza:

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