2017-02-22 31 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, поскольку индексы используются только на первом этапе конвейера.

код Try нижеперечисленный

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

Если вы можете поделиться образцовой структурой документа и желаемым выводом, я могу проверить его на своем компьютере и дать вам решение –