Næste gang skal du tilføje et eksempel på dit dokument, så folk kan gengive dit problem. Når det er sagt, kan jeg ikke se, hvor dit problem er. Jeg oprettede nogle data for at gengive din usecase. Så jeg tilføjede følgende dokument:
{
"_id" : ObjectId("5a0d5d376c9b762a7c035ec4"),
"projectName" : "some stack test",
"price" : NumberInt(45),
"propertyId" : {
"prefix" : "a",
"number" : "7"
}
}
Så udførte jeg dit script (uden sorteringen), og det fungerer fint:
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"
}
}
])
At du ikke får nogen resultater, skyldes sandsynligvis dine anmodningsparametre. Udover hvordan kan "projectName"
har de samme søgeparametre som din "document.id"
Matcher de overhovedet? Tjek din matchpipeline igen:
{"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},
{'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}