Następnym razem dodaj próbkę swojego dokumentu, aby inne osoby mogły odtworzyć Twój problem. Powiedziawszy, że nie widzę, gdzie jest twój problem. Stworzyłem trochę danych, aby odtworzyć twój przypadek użycia. Dodałem więc następujący dokument:
{
"_id" : ObjectId("5a0d5d376c9b762a7c035ec4"),
"projectName" : "some stack test",
"price" : NumberInt(45),
"propertyId" : {
"prefix" : "a",
"number" : "7"
}
}
Następnie wykonałem twój skrypt (bez sortowania) i działa dobrze:
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"
}
}
])
Brak wyników jest prawdopodobnie spowodowany parametrami żądania. Poza tym w jaki sposób "projectName"
mieć takie same parametry wyszukiwania jak Twój "document.id"
Czy w ogóle się zgadzają? Sprawdź ponownie potok dopasowań:
{"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},
{'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}