2017-02-22 95 views
0

我想用的文檔子文檔的屬性與此下面的代碼搜索:在mongodb中搜索文檔的子文檔?

Model.UserRole.aggregate(
[ 
    { 
     $match : { 
      status : { $in : ["inactive"] }, 
     } 
    }, 
    { 
     $lookup : { 
      from: "users", 
      localField: "user", 
      foreignField: "_id", 
      as: "user" 
     } 
    }, 
    { 
     $unwind : "$user" 
    }, 
    { 
     $match : { "user.name" : { $text: { $search: keyword } } } 
    } 
], function(err, result) { 
    callback(null, result); 
}); 

它給我這個錯誤:

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): MongoError: bad query: BadValue: unknown operator: $text

我找不到任何工作代碼在那裏。任何人建議大家?

+0

要搜索一個正常的字符串.. – Rendy

+0

什麼是你的文檔的結構,並在你收集創建的文本索引,bcoz $文本適用於文本索引。 –

+0

是的,我已經完成了所有這些工作。 – Rendy

回答

0

您應該在$ unwind之後使用正則表達式進行搜索,因爲索引僅用於管道的第一階段。提到

嘗試下面的代碼

Model.UserRole.aggregate(
[ 
    { 
     $match : { 
      status : { $in : ["inactive"] }, 
     } 
    }, 
    { 
     $lookup : { 
      from: "users", 
      localField: "user", 
      foreignField: "_id", 
      as: "user" 
     } 
    }, 
    { 
     $unwind : "$user" 
    }, 
    { 
     $match : { "user.name" : new RegExp(keyword, 'i') } 
    } 
], function(err, result) { 
    callback(null, result); 
}); 
+0

它返回我空數組.. – Rendy

+0

如果你可以共享一個示例文檔結構和所需的輸出,我可以在我的電腦上檢查它並給你解決方案 –