2017-07-17 78 views
0

我想構建一個匹配其中包含數據的字段的查詢。動態構建聚合查詢的json結構

我嘗試這樣做:

var matchStr = {}; 
if (received.user) { 
    matchStr = { "_id": { "$regex": received.user, "$options": "i" } }; 
} 
if (received.name) { 
    matchStr += { "name": { "$regex": received.name, "$options": "i" } }; 
} 
if (received.phone) { 
    matchStr += { "phone": { "$regex": received.phone, "$options": "i" } }; 
} 

usersTable.aggregate([ 
{ 
    $match: { matchStr } 
}, etc... 

我嘗試這樣做:

var matchStr = []; 
if (received.user) { 
    matchStr.push({ "_id": { "$regex": received.user, "$options": "i" } }); 
} 
if (received.name) { 
    matchStr.push({ "name": { "$regex": received.name, "$options": "i" } }); 
} 
if (received.phone) { 
    matchStr.push({ "phone": { "$regex": received.phone, "$options": "i" } }); 
}  

usersTable.aggregate([ 
{ 
    $match: { matchStr } 
}, etc... 

他們沒有工作。

確實沒有聰明的方法來做到這一點?

回答

1

你不應該使用內$match數組,正確的方法是使用一個對象,並給它分配:

var matchStr = {}; 
if (received.user) { 
    matchStr["_id"] = { "$regex": received.user, "$options": "i" }; 
} 
//etc... 

usersTable.aggregate([ 
{ 
    $match: matchStr 
}, 
//etc... 
+0

感謝尼克 - 那麼這是否意味着我仍然可以使用'$比賽:{和matchstr ''? - 我要馬上試試 – torbenrudgaard

+1

我已經更新了我的答案,您需要直接傳遞,'$ match:matchStr' –

+1

完美!非常感謝尼克! - 我不得不停止將mongodb聚合作爲字符串(我的背景是MsSql和Oracle hehe)。 Mongo聚合體是物體!現在一切正常。 – torbenrudgaard