sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDb $addFields y $match

La próxima vez, agregue una muestra de su documento para que las personas puedan reproducir su problema. Habiendo dicho eso, no veo dónde está tu problema. Creé algunos datos para reproducir su caso de uso. Así que agregué el siguiente documento:

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

Luego ejecuté su secuencia de comandos (sin ordenar) y funciona bien:

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

El hecho de que no obtenga resultados probablemente se deba a los parámetros de su solicitud. Además, ¿cómo puede el "projectName" tener los mismos parámetros de búsqueda que su "document.id" ¿Coinciden siquiera? Vuelva a comprobar su flujo de coincidencias:

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