Как сгруппировать в пн goose для внутреннего заполненного поля - PullRequest
3 голосов
/ 04 марта 2020

Я пытался искать это все выше и ниже, но мне не повезло, как это сделать.

Мне нужно сгруппировать по по полю, которое является подполем подполя. Это моя схема

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...