UserDetails
{
"_id" : "5c23536f807caa1bec00e79b",
"UID" : "1",
"name" : "A",
},
{
"_id" : "5c23536f807caa1bec00e78b",
"UID" : "2",
"name" : "B",
}
UserProducts
{
"_id" : "5c23536f807caa1bec00e79c",
"UPID" : "100",
"UID" : "1"
},
{
"_id" : "5c23536f807caa1bec00e79c",
"UPID" : "200",
"UID" : "2"
}
Группы
{
"_id" : "5bb20d7556db6915846da55f",
"members" : {
"regularStudent" : [
"200" // UPID
],
}
}
Шаг 1
Мне нужно взять UID из UserDetails , проверить с помощью UserProducts , затем взять UPID
из UserProducts
Шаг 2
мы должны проверить это UPID
сопоставленное с группами коллекцию или нет?
members.regularStudent
мы сопоставлены UPID
Шаг 3
Предположим, что UPID не сопоставлено означает, что я хочу напечатать UPID из UserProducts
Я пытался, но не смог завершить, пожалуйста, помогите мне с этим.
Ожидаемый результат:
["100"]
Примечание. Ожидаемый результат - ["100"]
, поскольку UserProducts имеет UPID 100 & 200
, но Группы отображаются только для коллекции 200
.
Мой код
db.UserDetails.aggregate(
{
$lookup: {
from: "UserProducts",
localField: "UID",
foreignField: "UID",
as: "userProduct"
}
},
{ $unwind: "$userProduct" },
{
"$project": { "_id" : 0, "userProduct.UPID" : 1 }
},
{
$group: {
_id: null,
userProductUPIDs: { $addToSet: "$userProduct.UPID" }
}
}
) // returns [ "100", "200" ]
db.Groups.aggregate([
{
$unwind: "$members.regularStudent"
},
{
$group: {
_id: null,
UPIDs: { $addToSet: "$members.regularStudent" }
}
}
]) // returns ["200"]
Теперь я хочу проверить $ setDifference обоих массивов, поэтому я добавил код ниже, но возвращаю ошибку, такую как $userProductUPIDs is not defined
db.Groups.aggregate([
{
$unwind: "$members.regularStudent"
},
{
$group: {
_id: null,
UPIDs: { $addToSet: "$members.regularStudent" }
}
},
{
$project: {
members: {
$setDifference: [ $userProductUPIDs , "$members" ]
},
_id : 0
}
}
])