次回は、ドキュメントのサンプルを追加して、他の人があなたの問題を再現できるようにしてください。あなたの問題がどこにあるのかわかりません。ユースケースを再現するためにいくつかのデータを作成しました。そこで、次のドキュメントを追加しました:
{
"_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"}}