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

如果你可以共享一个示例文档结构和所需的输出,我可以在我的电脑上检查它并给你解决方案 –