Получить объект Specifi c из массива из коллекции MongoDB в таблицу руля - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь построить таблицу со значениями из массива объектов из mongodb, но я могу получить только каждое значение и мне нужно только указать значение c.

Поэтому я сделал запрос наподобие это

router.get("/arquiveExpense", ensureAuthenticated, (req, res) => {
  House.find({
    userID: req.user.id,
    expensesHouse: { $elemMatch: { status: "Private" } }
  }).then(house => {
    console.log(house);
    res.render("houses/arquiveExpense", {
      house: house
    });
  });
});

Я хочу получить значение c из расходовДом со статусом «Частный».

И в руле у меня есть эта структура

<tbody>

                    <tr>
                        {{#each house}}

                        <td>{{expenseType}}</td>
                        <td>{{price}}€</td>
                        <td>{{payAt}}</td>

                        <td>{{formatDate date 'MMMM Do YYYY'}}</td>
                        <td>
                            <a href="/houses/showExpense/{{id}}" id="detailsExpense"
                                class="btn btn-outline-light mb-3"><i class="fas fa-eye mr-2"></i>Details
                            </a>
                        <td>
                            <a href="/houses/editExpense/{{id}}" id="editExpense" class="btn btn-outline-light mb-3"><i
                                    class="fas fa-edit mr-2"></i>Edit
                        </td>
                    </tr>

                    {{else}}
                    <p>No expenses</p>
                    {{/each}}
                </tbody>

И после этого руля это результат

Result

Структура схемы следующая MongoDB structure

Таким образом, я хочу показать на веб-странице значение из дешевые дома со статусом «Приватный».

Как изменить код для получения только этого значения?

1 Ответ

1 голос
/ 26 января 2020

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

router.get("/arquiveExpense", ensureAuthenticated, async (req, res) => {
    try {
        let house = await House.findOne({ // You can use findOne as if userID is unique
            userID: req.user.id
        }, { expensesHouse: { $elemMatch: { status: "Private" } } }) //$elemMatch in projection helps you to get what is needed
        if (house) { // .findOne() returns null if no document found, else an object
            console.log(house);
            res.render("houses/arquiveExpense", {
                house: house
            });
        } else { // No document found
            console.log('No house found')
        }
    } catch (error) {
        console.log('Error at DB call ::', error)
    }
})
...