У меня есть 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",
}