Show
db.classes.insert([
{
_id: 1.0,
title: "Reading is ...",
enrollmentlist: ["giraffe2", "pandabear", "artie"],
days: ["M", "W", "F"]
},
{
_id: 2.0,
title: "But Writing ...",
enrollmentlist: ["giraffe1", "artie"],
days: ["T", "F"]
},
{
_id: 3.0,
title: "Math",
enrollmentlist: ["giraffe1", "artie"],
days: ["T", "F"]
},
{
_id: 4.0,
title: "Science",
enrollmentlist: ["giraffe1", "artie"],
days: ["T", "F"]
}
]);
db.members.insert([
{
_id: 1.0,
name: "artie",
names: ["giraffe2", "pandabear", "artie"],
joined: ISODate("2016-05-01T00:00:00.000Z"),
status: "A"
},
{
_id: 2.0,
name: "giraffe",
names: ["giraffe", "yyy"],
joined: ISODate("2017-05-01T00:00:00.000Z"),
status: "D"
},
{
_id: 3.0,
name: "giraffe1",
names: ["giraffe1", 33],
joined: ISODate("2017-10-01T00:00:00.000Z"),
status: "A"
},
{
_id: 4.0,
name: "panda",
names: ["panda", "r"],
joined: ISODate("2018-10-11T00:00:00.000Z"),
status: "A"
},
{
_id: 5.0,
name: "pandabear",
names: ["pandabear", 123],
joined: ISODate("2018-12-01T00:00:00.000Z"),
status: "A"
},
{
_id: 6.0,
name: "giraffe2",
names: ["giraffe2", "www"],
joined: ISODate("2018-12-01T00:00:00.000Z"),
status: "D"
}
]);
Then observe that
db.members.aggregate([
{
$lookup: {
from: "classes",
let: { names: "$names" }, // ----> $names is an array
pipeline: [{ $match: { $expr: { $in: ["$$names", "$enrollmentlist"] } } }],
as: "classes_info"
}
}
]);
returns empty join results, while
db.members.aggregate([
{
$lookup: {
from: "classes",
let: { names: "$name" }, // ----> $name is a string
pipeline: [{ $match: { $expr: { $in: ["$$names", "$enrollmentlist"] } } }],
as: "classes_info"
}
}
]);
does not. It seems arrays are not represented correctly in the pipeline stage of a $lookup
I'm on version 4.0.4 - apologies if this was fixed in a later version - I can't find any references to it, if so.