MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDb $ addFields e $ match


Da próxima vez, adicione uma amostra do seu documento para que as pessoas possam reproduzir seu problema. Dito isso, não vejo onde está o seu problema. Criei alguns dados para reproduzir seu caso de uso. Então eu adicionei o seguinte documento:
{ 
    "_id" : ObjectId("5a0d5d376c9b762a7c035ec4"), 
    "projectName" : "some stack test", 
    "price" : NumberInt(45), 
    "propertyId" : {
        "prefix" : "a", 
        "number" : "7"
    }
}

Então eu executei seu script (sem a classificação) e funciona bem:
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"
        }
    }
])

O fato de você não obter resultados provavelmente se deve aos parâmetros de sua solicitação. Além de como o "projectName" tem os mesmos parâmetros de pesquisa que seu "document.id" Eles correspondem? Verifique seu pipeline de correspondências novamente:
{"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},       
{'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}