Příště prosím přidejte ukázku svého dokumentu, aby lidé mohli reprodukovat váš problém. Řekl jsem, že nevidím, kde je váš problém. Vytvořil jsem nějaká data pro reprodukci vašeho případu použití. Přidal jsem tedy následující dokument:
{
"_id" : ObjectId("5a0d5d376c9b762a7c035ec4"),
"projectName" : "some stack test",
"price" : NumberInt(45),
"propertyId" : {
"prefix" : "a",
"number" : "7"
}
}
Potom jsem provedl váš skript (bez řazení) a funguje dobře:
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"
}
}
])
Skutečnost, že nedostanete žádné výsledky, je pravděpodobně způsobena parametry vašeho požadavku. Kromě toho, jak může "projectName"
mít stejné parametry vyhledávání jako váš "document.id"
Shodují se vůbec? Zkontrolujte znovu svůj seznam zápasů:
{"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},
{'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}