我有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)
这个“ created_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)
并且此结果在created_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)
UPDATE:示例文档 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"
}
}
核心用户
{
"_id": "f0ae108f-7dca-4bd1-ba7a-bcf50d9f7814",
"id": "f0ae108f-7dca-4bd1-ba7a-bcf50d9f7814",
"first_name": "Joe",
"last_name": "User",
}
答案 0 :(得分:0)
查找不适用于管道属性。 如果假设字段名称错误,请更正我。 尝试如下操作:
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"
}
}
]);