Как опубликовать массив javascript в MongoDB из приложения реакции? - PullRequest
2 голосов
/ 02 марта 2020

Я новичок, узнающий больше о реакции и mongoDB, и у меня возникли некоторые проблемы в общении между ними. Я следовал учебнику на Medium по использованию Plaid API для получения исторических данных транзакций от пользователей ( вот кодовая база учебника, используемая ). Хотя банковские счета пользователей и информация о профилях пользователей хранятся в бэкэнде mongoDB, данные транзакции - нет. Вместо этого вызов API выполняется каждый раз, когда пользователь попадает на определенную страницу, и данные транзакции превращаются в массив, который отображается пользователю в таблице данных на внешнем интерфейсе.

Это находится в строке 56 учетных записей. js файл в кодовой базе учебника, ссылка на которую приведена выше (файл находится в этом каталоге: client \ src \ components \ dashboard)

// Setting up data table
    const transactionsColumns = [
      { title: "Account", field: "account" },
      { title: "Date", field: "date", type: "date", defaultSort: "desc" },
      { title: "Name", field: "name" },
      { title: "Amount", field: "amount" },
      { title: "Category", field: "category" }
    ];
let transactionsData = [];
    transactions.forEach(function(account) {
      account.transactions.forEach(function(transaction) {
        transactionsData.push({
          account: account.accountName,
          date: transaction.date,
          category: transaction.category[0],
          name: transaction.name,
          amount: transaction.amount
        });
      });
    });

Вместо этого я хотел бы опубликовать этот массив на подключенной к mongoDB базе данных, иначе я бы никогда не смог увидеть какие-либо данные о транзакциях, которые извлекает пользователь. Что я должен сделать, чтобы выполнить sh, это создайте новый файл js в моделях, называемых транзакциями. js. В настоящее время в папке моделей (в родительском каталоге) есть файл Account. js и файл User. js, которые устанавливают схему для каждого из этих соответствующих наборов данных. Я имею в виду транзакции. js будет выглядеть следующим образом (что будет соответствовать формату массива, указанному выше):

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const TransactionSchema = new Schema({
  userId: {
    type: Schema.Types.ObjectId, // how we associate each transaction with a user
    ref: "users"
  },
  accessToken: {
    type: String,
    required: true
  },
  itemId: {
    type: String,
    required: true
  },
  account: {
    type: String
  },
  date: {
    type: Date
  },
  name: {
    type: String
  },
  amount: {
    type: String
  },
  category: {
    type: String
  },
});

module.exports = Transaction = mongoose.model("transaction", TransactionSchema);

Но оттуда я не уверен, что делать, как размещать массив транзакцииData в эту схему. В идеале я хотел бы, чтобы он публиковал сообщения каждый раз, когда пользователь нажимает на API, и добавляет элементы в TransactionSchema только в том случае, если они еще не существуют.

Схожий вопрос, который у меня возник, заключается в том, каков наиболее эффективный способ предоставления определенных c данных пользователю на внешнем интерфейсе при вызове данных из mongoDB? Например, тот же файл Accounts. js, на который есть ссылки выше, содержит это в строке 76:

<b>Welcome, {user.name.split(" ")[0]}</b>

Что он делает, он захватывает полное имя пользователя, которое было введено при регистрации, а затем преобразует его в первое имя. Мне кажется, что это ссылка на файл User. js, который находится в моделях, и запрашивает поле имени. Когда я изменяю это на другое поле, которое находится в пользовательском. js однако (например, электронная почта) и использую тот же код соглашения {user.email} Я не вижу никаких результатов.

Спасибо за помощь !

1 Ответ

1 голос
/ 02 марта 2020

вы можете сделать что-то вроде этого

let Transaction = require("./model/Transaction.js") // whatever file your transaction schema is stored in


// do this is in the same place you create the transactionData from the transactionData array
transactionData.foreach(async data => {
    const newTransaction = new Transaction(data)
    await newTransaction.save()
})

, это создаст новый Экземпляр схемы транзакции для каждой транзакции в вашем массиве transactionData и сохранит ее в базе данных

...