Voeg de volgende keer een voorbeeld van uw document toe, zodat mensen uw probleem kunnen reproduceren. Dat gezegd hebbende, ik zie niet waar je probleem zit. Ik heb wat gegevens gemaakt om je usecase te reproduceren. Dus heb ik het volgende document toegevoegd:
{
"_id" : ObjectId("5a0d5d376c9b762a7c035ec4"),
"projectName" : "some stack test",
"price" : NumberInt(45),
"propertyId" : {
"prefix" : "a",
"number" : "7"
}
}
Daarna heb ik je script uitgevoerd (zonder de sortering) en het werkt prima:
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"
}
}
])
Het feit dat u geen resultaten krijgt, is waarschijnlijk te wijten aan uw verzoekparameters. Trouwens, hoe kan de "projectName"
dezelfde zoekparameters hebben als uw "document.id"
Komen ze wel overeen? Controleer je matchpijplijn opnieuw:
{"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},
{'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}