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