У меня есть следующие схемы.
Первый: AdditionalFieldSchema
const AdditionalFieldSchema = new Schema({
names: [
{
type: Schema.Types.ObjectId,
ref: "multiLanguageContent",
required: true
}
],
...
});
Второй: MultiLanguageContentSchema
const MultiLanguageContentSchema = new Schema({
value: {
type: String,
required: true
},
...
});
, и у меня есть следующий агрегированный запрос mongoose. Цель состоит в том, чтобы выбрать всех сотрудников с прикрепленным к ним дополнительным полем.
const employees = await Employee.aggregate([
{
$match: {
status: "active",
$nor: [
{ email: "blablabla" },
{ email: "blobloblo" }
]
}
},
{
$lookup: {
from: AdditionalField.collection.name,
let: { af_id: "$_id" },
pipeline: [{
$match: {
$expr: {
$and: [
{ $eq: ["$ownership", "$$af_id"] },
{ $eq: ["$status", "active"] },
{ $eq: ["$functionalType", "blablabla"] }
]
}
}
}],
as: "afs"
}
},
{ $unwind: "$afs" },
{ $unwind: "$afs.names" },
{
$group: {
_id: "$_id",
email: { $first: "$email" },
afs: {
$push: {
value: "$afs.value",
names: "$afs.names"
}
}
}
}
]);
Запрос, который я запускаю для проверки этой агрегатной функции.
query TestQuery {
testQuery
{
email
afs {
names {
value
}
value
}
}
}
Результат, который у меня есть.
"data": {
"testQuery": [
{
"email": "blablabla@test.com"
"afs": [
{
"names": [
{
"value": "Name 1"
}
],
"value": "Value 1"
},
{
"names": [
{
"value": "Name 2"
}
],
"value": "Value 2"
},
...
]
},
...
Результат хорош, у меня есть данные, которые я хочу. Но я хотел бы получить такой результат ниже
"data": {
"testQuery": [
{
"email": "blablabla@test.com",
"afs": [
{
"names": "Name 1",
"value": "Value 1"
},
{
"names": "Name 2",
"value": "Value 2"
},
...
]
},
...
Кажется, { $unwind: "$afs.names" },
не работает. Есть идеи ? Спасибо, Фло