Пн goose поиск и поиск - PullRequest
0 голосов
/ 26 мая 2020

Я работаю в компании и хочу составить список пользовательских историй команды. У меня две таблицы. Один содержит США. Другой содержит спринты, которые сами содержат идентификаторы США, созданные во время этого спринта.

Shemas выглядит примерно так.


const Userstories = mongoose.Schema({
    Name: String,  
    Date: Date
});

const Sprint= mongoose.Schema({
    Name: String,
    Userstories: [{type: mongoose.Schema.Types.ObjectId, ref: "userStory"}],
    Author: String,
    Date: Date
});

Иногда мне нужен список США для спецификации c Sprint.

И для этого я использовал функцию поиска. Но не знаю почему, находку при этом сделать не могу. В конце концов, я сделал следующее:

Sprint.aggregate([{
        $lookup: {
            from: 'userstories',
            localField: 'Userstories',
            foreignField: '_id',
            as: 'Userstories'
        }
    }
const photos = agregate.find(us => us._id == id);

Сначала я выполняю агрегацию, а потом нахожу ее.

Но я думаю, что это требует больших затрат времени вычислений.

Вот почему я хотел знать, оптимизирует ли Mon goose такой случай? А если нет, то как мне правильнее написать свой запрос?

1 Ответ

1 голос
/ 26 мая 2020

Вам нужно найти Sprint, используя агрегацию $ match .

Таким образом, вы можете использовать следующий пример получения маршрута:

router.get("/sprints/:id", async (req, res) => {
  const id = req.params.id;

  const result = await Sprint.aggregate([
    {
      $match: {
        _id: ObjectId(id),
      },
    },
    {
      $lookup: {
        from: "userstories",
        localField: "Userstories",
        foreignField: "_id",
        as: "Userstories",
      },
    },
  ]);
  res.send(result);
});

Допустим, у вас есть эти два документа Userstories:

{
    "_id" : ObjectId("5ecd60f21f3c84289488d6d9"),
    "Name" : "story 1",
    "Date" : ISODate("2020-05-26T21:33:22.543+03:00")
},
{
    "_id" : ObjectId("5ecd60fb1f3c84289488d6da"),
    "Name" : "story 2",
    "Date" : ISODate("2020-05-26T21:33:31.692+03:00")
},

И этот спринт-документ:

{
    "_id" : ObjectId("5ecd610f1f3c84289488d6db"),
    "Userstories" : [
        ObjectId("5ecd60f21f3c84289488d6d9"),
        ObjectId("5ecd60fb1f3c84289488d6da")
    ],
    "Name" : "Sprint 1",
    "Author" : "Author 1",
    "Date" : ISODate("2020-05-26T21:33:51.928+03:00")
}

Результат для этого спринта будет таким:

[
    {
        "_id": "5ecd610f1f3c84289488d6db",
        "Userstories": [
            {
                "_id": "5ecd60f21f3c84289488d6d9",
                "Name": "story 1",
                "Date": "2020-05-26T18:33:22.543Z",
                "__v": 0
            },
            {
                "_id": "5ecd60fb1f3c84289488d6da",
                "Name": "story 2",
                "Date": "2020-05-26T18:33:31.692Z",
                "__v": 0
            }
        ],
        "Name": "Sprint 1",
        "Author": "Author 1",
        "Date": "2020-05-26T18:33:51.928Z",
        "__v": 0
    }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...