Nästa gång lägg till ett exempel på ditt dokument så att andra kan återskapa ditt problem. Med det sagt så ser jag inte var ditt problem ligger. Jag skapade lite data för att återskapa ditt användningsfall. Så jag lade till följande dokument:
{
"_id" : ObjectId("5a0d5d376c9b762a7c035ec4"),
"projectName" : "some stack test",
"price" : NumberInt(45),
"propertyId" : {
"prefix" : "a",
"number" : "7"
}
}
Sedan körde jag ditt skript (utan sorten) och det fungerar bra:
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"
}
}
])
Att du inte får några resultat beror förmodligen på dina förfrågningsparametrar. Förutom hur kan "projectName"
har samma sökparametrar som din "document.id"
Matchar de ens? Kontrollera din matchpipeline igen:
{"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},
{'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}