Разделить значения поля на несколько значений

#node.js #mongodb #express #mustache

#node.js #mongodb #выразить #усы

Вопрос:

В настоящее время я работаю на веб-сайте электронной коммерции, и у меня возникли проблемы с отображением отчета на моей странице.

вот мой узел server.js

 app.get('/adminReport', function (req,res){
var transaction = []
        mongoDb.collection('transactions').find().toArray(function(err,results) 
        {
            transaction =results
        //console.log(results);
            return res.render('adminReport.html', {
            transactions: transaction
            });
        });
});
  

вот мой код на HTML

 <thead>
    <tr>
        <th>Transaction ID</th>
        <th>Name</th>
        <th>UserID</th>
        <th>Time Ordered</th>
        <th>Job Title</th>
        <th>Address</th>
        <th>Email Address</th>
        <th>Contact Number</th>
        <th>Purchase Option(Pick-up or Delivery)</th>
        <th>Payment Method</th>
        <th>Item Ordered</th>
        <th>Status</th>
    </tr>
</thead>

<tbody>
        {{#transactions}}
    <tr>
        <td>{{_id}}</td>
        <td>{{lastName}}, {{firstName}}</td>
        <td>{{userId}}</td>

        <td>{{timeOrdered}}</td>
        <td>{{jobTitle}}</td>
        <td>{{address}} , {{city}}, {{province}}, {{zip}}</td>
        <td>{{email}}</td>
        <td>{{contactNo}}</td>
        <td>{{purchaseOpt}}</td>
        <td>{{paymentMethod}}</td>
        <td>
                <table>
                    <th>Transaction ID</th>
                    <th>Item Name</th>
                    <th>Quantity</th>
                    <th>Price</th>
             <!-- item purchased -->
                    <tr>
                        <td>{{cartId}}</td>
                        <td>{{itemName}}</td>
                        <td>{{quantity}}</td>
                        <td>₱{{price}}</td>
                    </tr>

                </table>
            </td>
        <td>{{status}}</td>

    </tr> {{/transactions}}
  

вот результат в виде chromes-source

 <thead>
    <tr>
        <th>Transaction ID</th>
        <th>Name</th>
        <th>UserID</th>
        <th>Time Ordered</th>
        <th>Job Title</th>
        <th>Address</th>
        <th>Email Address</th>
        <th>Contact Number</th>
        <th>Purchase Option(Pick-up or Delivery)</th>
        <th>Payment Method</th>
        <th>Item Ordered</th>
        <th>Status</th>
    </tr>
</thead>

<tbody>
    <tr>
        <td>5c9711730d8f1c2287f5a439</td>
        <td>Jordan, Micheal</td>
        <td>12341</td>

        <td>Sunday 24 Mar 1:11 PM</td>
        <td>Programmer</td>
        <td>123 St. Atlanta , Baguio, Kadabra, 1500</td>
        <td>micheal@tesing.com</td>
        <td>95057435</td>
        <td>pickUp</td>
        <td>cash</td>
        <td>
                <table>
                    <th>Transaction ID</th>
                    <th>Item Name</th>
                    <th>Quantity</th>
                    <th>Price</th>
            <!-- item purchased -->
                    <tr>
                        <td>5c95cb8f36d0c71f05ddf9de,5c95d4b6d82a782747e929a3</td>
                        <td>Bag,Shirt</td>
                        <td>2,1</td>
                        <td>₱62,20</td>
                    </tr>
                </table>
            </td>
        <td></td>

    </tr> 

</tbody>

  

я хочу разделить сумку и рубашку на разные <td> .

Я использую MongoDB в качестве своей базы данных, и возможно ли разделить значение, если только определенное поле имеет несколько значений?

     firstName: 'Micheal',
    lastName: 'Jordan',
    kinId: '12341',
    country: 'Deployed',
    contactNo: '95057435',
    email: 'micheal@tesing.com',
    jobTitle: 'Programmer',
    address: '123 St. Atlanta',
    province: 'Kadabra',
    city: 'Baguio',
    zip: '1500',
    purchaseOpt: 'pickUp',
    paymentMethod: 'cash',
    timeOrdered: 'Sunday 24 Mar 1:11 PM',
    cartId: [ '5c95cb8f36d0c71f05ddf9de', '5c95d4b6d82a782747e929a3' ],
    itemName: [ 'Bag', 'Shirt' ],
    quantity: [ '2', '1' ],
    price: [ '62', '20' ] } ]
  

В этом отношении cartId, ItemName, quantity, price являются единственными полями с несколькими значениями, возможно ли отобразить их отдельно на моей HTML-странице, как сумку и рубашку на разных <td> .

Комментарии:

1. Над вашей схемой не помешала бы некоторая работа. Вместо того, чтобы иметь разные массивы в документе, у вас должен быть один массив объектов. т.е. items: [{ _id: '5c95cb8f36d0c71f05ddf9de', name: 'Bag', quantity: 2, price: 62 }, { _id: '5c95d4b6d82a782747e929a3', name: 'Shirt', quantity: 1, price: 20 }] . В принципе, это упрощает обработку, чем цикл по индексу, и позже вы обнаружите, что не сталкиваетесь с проблемой с многоключевыми индексами в MongoDB, к которой склонен ваш текущий дизайн.

2. спасибо за это, Нил, я буду использовать эту идею, большое спасибо 🙂

3. Немного покопавшись, вам в принципе нужно. Либо путем наличия этой структуры в базе данных, либо путем выполнения цикла над массивами в документе в настоящее время, чтобы принудительно привести их к этой форме. По-видимому, в mustache отсутствует какой-либо способ «динамической» ссылки на элемент массива по его индексной позиции. Это означает, что вам нужны ваши данные в такой форме, чтобы обрабатывать их в вашем шаблоне так, как вы хотите. Но в первую очередь имеет смысл просто сохранить его в этой базе данных таким образом. По разным другим причинам, как я уже упоминал.

Ответ №1:

Вы можете перебирать значения itemName , cartId и т.д. Таким же образом, как вы перебираете свой массив транзакций.

Итак, вместо:

 <td>{{itemName}}</td>
  

Попробуйте что-то вроде:

 {{#itemName}}
  <td>{{itemName}}</td>
{{/itemName}}
  

Смотрите документы mustache в разделе, озаглавленном «Непустые списки».

Комментарии:

1. Основная проблема, как я это видел, заключалась в том, что фактическая проблема заключается в том, как «зациклить» что-то вроде cartId , а затем использовать текущий индекс массива , чтобы получить одинаковый соответствующий элемент позиции из каждого из других массивов в «транзакции». AFAIK философия mustache — это «минимальная логика», и, как таковая, такого доступа к динамической переменной не существует. Сначала вам нужно реструктурировать данные. Следовательно, было бы намного лучше просто хранить данные в MongoDB именно так, как вы хотите использовать их в шаблоне. Затем вы просто «зацикливаете» подпункты транзакции внутри шаблона

2. jknotek спасибо за помощь, я попробовал это, но результат все тот же, но я получил новые знания о mustache, спасибо 🙂