Mongo Query Filter $ lookup не фильтруется правильно - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть 3 запроса, которые, насколько мне известно, должны быть синонимами, но они дают совершенно разные результаты, и мне интересно, может ли кто-нибудь помочь восполнить пробел в моих знаниях по этому вопросу.

Этот работаетидеально, и дает точный результат, который я ищу, пользователь, который создал его

db.getCollection("core-navlink").aggregate([
    { $match : { id : "c1a13efc-1203-436b-a32c-e59a889c08a3" } },
    {
        $lookup : {
            from : "core-user",
            as : "created_by_user",
            let : { module_id : "$created_by.module_id" },
            pipeline : [
                { $match : {  $expr : { $and : [ {  $eq : [ "$id" ,  "$$module_id"] }  ] } } } 
            ]
        } 
    } 
]).projection({})
   .sort({_id:-1})
   .limit(100)

Этот, "made_by_user" дает всем пользователям не только тот, который я ищу

db.getCollection("core-navlink").aggregate([
    { $match : { id : "c1a13efc-1203-436b-a32c-e59a889c08a3" } },
    {
        $lookup : {
            from : "core-user",
            as : "created_by_user",
            let : { module_id : "$created_by.module_id" },
            pipeline : [
                { $match : {  $expr : { $and : [ {  id :  "$$module_id"  } ] } } } 
            ]
        } 
    } 
]).projection({})
   .sort({_id:-1})
   .limit(100)

А этот не дает результатов обратно в массиве creat_by_user

db.getCollection("core-navlink").aggregate([
    { $match : { id : "c1a13efc-1203-436b-a32c-e59a889c08a3" } },
    {
        $lookup : {
            from : "core-user",
            as : "created_by_user",
            let : { module_id : "$created_by.module_id" },
            pipeline : [
                { $match : {     id :  "$$module_id"  }  } 
            ]
        } 
    } 
]).projection({})
   .sort({_id:-1})
   .limit(100)

ОБНОВЛЕНИЕ: Примеры документов core-navlink: (Минимизировано только для соответствующих полей)

{
  "_id": "c1a13efc-1203-436b-a32c-e59a889c08a3",
  "id": "c1a13efc-1203-436b-a32c-e59a889c08a3",
  "created_by": {
    "module_name": "USER",
    "module_id": "f0ae108f-7dca-4bd1-ba7a-bcf50d9f7814"
  }
}

core-user

{
  "_id": "f0ae108f-7dca-4bd1-ba7a-bcf50d9f7814",
  "id": "f0ae108f-7dca-4bd1-ba7a-bcf50d9f7814",
  "first_name": "Joe",
  "last_name": "User",
}

1 Ответ

0 голосов
/ 27 сентября 2019

Поиск не работает с атрибутом конвейера.Пожалуйста, исправьте меня, если предполагается, что имя поля неверно.Попробуйте как показано ниже:

db.getCollection("core-navlink").aggregate([
    { $match : { id : "c1a13efc-1203-436b-a32c-e59a889c08a3" } },
    {
        $lookup : {
            from : "core-user",
            localField: "module_id", // assumes this field on core-navlink
            foreignField: "_id", // assumes this field on "core-user"
            as : "created_by_user"

        } 
    } 
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...