Следващия път, моля, добавете извадка от вашия документ, за да могат хората да възпроизведат проблема ви. Като казах това, не виждам къде ти е проблемът. Създадох някои данни, за да възпроизведа вашата употреба. Затова добавих следния документ:
{
"_id" : ObjectId("5a0d5d376c9b762a7c035ec4"),
"projectName" : "some stack test",
"price" : NumberInt(45),
"propertyId" : {
"prefix" : "a",
"number" : "7"
}
}
След това изпълних вашия скрипт (без сортирането) и той работи добре:
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"
}
}
])
Фактът, че не получавате резултати, вероятно се дължи на параметрите на вашата заявка. Освен това как може "projectName"
имат същите параметри за търсене като вашия "document.id"
Съвпадат ли изобщо? Проверете отново линията си за съвпадение:
{"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},
{'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}