Я пытался искать это все выше и ниже, но мне не повезло, как это сделать.
Мне нужно сгруппировать по по полю, которое является подполем подполя. Это моя схема
const BoxSchema = new mongoos.Schema({
name: {
type: String,
required: true,
},
// List of workflows inside one Box
workflows: [{
type: ObjectId,
ref: 'Workflow',
}],
})
const WorkflowSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
// The box the workflow belongs to
boxId: {
type: ObjectId,
required: true,
ref: 'Box',
},
// List of cards inside the workflow
cards: {
type: [ObjectId],
ref: 'Card',
},
// List of groups inside the workflow
groups: {
type: [ObjectId],
ref: 'Group',
},
})
const GroupSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
// The box the group belongs to
boxId: {
type: ObjectId,
required: true,
ref: 'Box',
},
// The workflow the group belongs to
workflow: {
type: ObjectId,
required: true,
ref: 'Workflow',
},
})
const CardSchema = new mongoose.Schema({
title: {
type: String,
required: true,
},
// The Workflow the card belongs to
workflow: {
type: ObjectId,
ref: 'Workflow',
},
// The Group the card belongs to
group: {
type: ObjectId,
ref: 'Group',
},
properties: [{
name: {
type: String,
required: true,
},
items: [{
value: { type: String, default: '' },
isSelected: { type: Boolean, default: false },
}],
}],
isTemplate: {
type: Boolean,
},
})
Я хотел бы получить список всех Workflows
внутри Box
, сгруппированных по полю Group
внутри каждой карты. Может быть, что-то вроде этого?
workflows: [
{
"id": "5e39384c7921940fa8b5500a",
"name": "Input",
"group": [
"cards": [...]
],
"group": [
"cards": [...]
],
"group": [
"cards": [...]
],
}
]
Я много пробовал с $ lookup или $ match, у меня только пустые массивы, поэтому я наконец-то прибегаю к этому вопросу. Буду признателен за любые рекомендации.
PS Я знаю, что схему можно создать по-другому, но проблема в том, что схема Group
является новым дополнением, и поэтому я решил пометить ее внутри каждой карты, потому что есть возможно, карта не имеет Group
, но может быть частью Workflow
Спасибо.
РЕДАКТИРОВАТЬ:
Пример данных для каждой коллекции:
BOX
{
"_id" : ObjectId("5e3934047921940fa8b54ffd"),
"cards" : [
ObjectId("5e4ff643a966a14d44e26485"),
ObjectId("5e4ff647a966a14d44e26494"),
ObjectId("5e4ff64ba966a14d44e264a3"),
ObjectId("5e4ff653a966a14d44e264ae"),
],
"workflows" : [
ObjectId("5e39384c7921940fa8b5500a"),
ObjectId("5e39385f7921940fa8b5500c"),
ObjectId("5e39386a7921940fa8b5500e"),
],
"name" : "My Workplace",
"createdAt" : ISODate("2020-02-04T09:06:12.686Z"),
"updatedAt" : ISODate("2020-03-02T15:22:21.563Z"),
"__v" : 0
}
WORKFLOW
{
"_id" : ObjectId("5e39384c7921940fa8b5500a"),
"cards" : [
ObjectId("5e553667ed55fa44104d860b"),
ObjectId("5e5777e4ca0d275bc8cb880a"),
ObjectId("5e53c6a7bf63a0169c7fbdb6"),
ObjectId("5e393c7b7921940fa8b550d5"),
],
"name" : "Input",
"boxId" : ObjectId("5e3934047921940fa8b54ffd"),
"createdAt" : ISODate("2020-02-04T09:24:28.753Z"),
"updatedAt" : ISODate("2020-03-04T11:04:47.716Z"),
"__v" : 0
}
У меня ничего нет для группы, так как это новая схема
КАРТА
{
"_id" : ObjectId("5e3938c37921940fa8b55012"),
"title" : "Main Article",
"isTemplate" : true,
"box" : ObjectId("5e3934047921940fa8b54ffd"),
"properties" : [
{
"_id" : ObjectId("5e3939a57921940fa8b55031"),
"name" : "Größe",
"items" : [
{
"_id" : ObjectId("5e3939c67921940fa8b55035"),
"value" : "Large - 1000 Wörter",
"isSelected" : true
},
{
"_id" : ObjectId("5e3939d27921940fa8b55036"),
"value" : "Medium - 650 Wörter",
"isSelected" : false
},
{
"_id" : ObjectId("5e3939da7921940fa8b55037"),
"value" : "Small - 250 Wörter",
"isSelected" : false
}
]
}
],
"createdAt" : ISODate("2020-02-04T09:26:27.489Z"),
"updatedAt" : ISODate("2020-02-04T09:31:40.182Z"),
"__v" : 0
}