2016-06-02 3 views
0

У меня есть основной документ, который я совершаю агрегат на поиск в комбинации первых и и фамилий в сочетании:Mongoose агрегатного матча, если в массиве

Моего документ:

{ 
    _id: dmw9294r94 
    firstName: "John", 
    lastName: "Smith", 
    friends: [28enw93hr, 29nwgkn38] 
} 

Моего совокупная pipline:

User.aggregate([ 
    { 
     $project: { 
      "name" : { $concat : [ "$firstName", " ", "$lastName" ] }, 
      "firstName": "$firstName", 
      "lastName": "$lastName", 
      "username": "$username", 
      "friends": "$friends"} 
    },{ 
     $match: { 
      "name": {$regex: new RegExp(req.query.query, "i") 
     } 
    }}]).exec(function(err, results){ 
     res.json(results); 
    } 
); 

Как я могу добавить к этому, чтобы проверить, является ли конкретный идентификатор пользователя существует в этом пользователей friends массив?

Я попытался следующим, но не везло:

$match: { 
    "name": {$regex: new RegExp(req.query.query, "i"), 
    "friends" {$eq: myVarHere} 
} 
+0

изменить '$ eq' на' $ in' [больше здесь] (https://docs.mongodb.com/manual/reference/operator/query/in/) – profesor79

+0

Пробовал '$ in' тоже, и все еще нет удачи. – Fizzix

+0

Кажется, что '$ in' работает, если проверяется в массиве. Я пытаюсь наоборот, проверяя, содержит ли массив значение. – Fizzix

ответ

0

Как @ profesor79 сказал, вы просто должны $ матча за идентификатор пользователя вы заинтересованы в:

{$ матча: {» friends ":" user_id_to_find ")}

Если я не понимаю вопроса, мне кажется, что $ regex здесь не нужен.

+0

'$ regex' используется для поиска комбинации' firstName' и 'lastName'. Не очень уместный вопрос, просто подумал, что я включу его здесь. – Fizzix

Смежные вопросы