Mongo - Обновление записи для вложенного массива и объектов - PullRequest
0 голосов
/ 08 ноября 2018

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

Я пытаюсь создать приложение CRUD на основе Node + Express + Mongo.Я чувствую, что разработанная мной схема не является хорошим решением для этого проекта.Я хотел бы сохранить всю транзакциюInfo в одном месте и связать ее со statmentInfo, чтобы я мог легко проиндексировать или изменить этот раздел (blingBlaw.transactionInfo).Я также пытаюсь создать схему таким образом, но я столкнулся с похожей проблемой.

blingBlaw.statmentData[0].statmetInfo = [{}]
blingBlaw.statmentData[0].transactionInfo = [{}]

Мне кажется, что это проблемы, которые не позволяют мне обновить вложенную транзакциюInfo

ЭтоИзображение запроса монго, где должен использоваться этот метод для изменения вложенной коллекции с точечной нотацией

enter image description here

Это сообщение, которое я получаю, яЯ не уверен, что эта ошибка означает, То, как я перебираю массив, чтобы изменить несоответствие или что-то еще со значением, которое я даю.

{ n: 0, nModified: 0, ok: 1 }

У меня возникли проблемы при поиске решения для добавления, изменения и удаления вложенных документов.Это может быть мой дизайн, в котором сложно перебирать массивы объектов.

Я пытаюсь сохранить данные из CSV -> превратить их в массив и вставить эти данные в actionInfo .

Вот как я добавляю actionInfo (добавление в порядке)

    // Upload object - setting up for Statement and transaction
    let statementInfo = {
      statement_id: req.session.statementInfo.statement_id,
      statementName: req.session.statementInfo.statementName,
      statementType: req.session.statementInfo.statementType,
      statementDate: req.session.statementInfo.statementDate,
      statementDesc: req.session.statementInfo.statementDesc,
      statementFileInfo: req.session.statementInfo.statementFileInfo,
      statementCreated: req.session.statementInfo.statementCreated,
      statementModified: req.session.statementInfo.statementModified,
      statementModifiedtUser: req.session.statementInfo.statementModifiedtUser,
    }
    let transactionInfo = {};
    for (let i in req.body.modulesTransId) {
      transactionInfo[i] = {
        transactionId: ObjectId(),
        transDate: req.body.modulesTransDate[i],
        transDesc: req.body.modulesTransDesc[i],
        transWithdraw: req.body.modulesTransWithdraw[i],
        transDeposite: req.body.modulesTransDeposite[i],
        transBalance: req.body.modulesTransBalance[i],
        transCat: req.body.modulesCatName[i],
        transComment: req.body.modulesTransComment[i],
        transType: req.body.modulesTransType[i],
        statementId: req.session.statementInfo.statement_id,
        transactiontModified: "",
        transactiontModifiedUser: ""
      }
    };
    // set validation Data
    let valData = {
      "_id": req.session.userId
    }
    // request DB conections
    const db = req.db;
    const collectionBling = db.get(collectionBlingBlaw);
    // mongo push the new category
    collectionBling.update(valData, {
      $push: {
        "statementInfo": statementInfo,
        "transactionInfo": transactionInfo
      }
    }, {
      upsert: true
    }, function(err, results) {
      if (err) { // If it failed, return error
        console.log("err: " + err);
        flashData.pageMesage = "Error adding Statement";
        flashData.bgColor = "danger";
        flashData.info = err;
        req.flash('flashData', flashData);
        res.redirect('/statement');
      } else { // else add category and redirect to Category Dashboard
        console.log("Category added: " + results);
        flashData.pageMesage = "Statement been added!";
        flashData.bgColor = "success";
        flashData.info = results;
        req.flash('flashData', flashData);
        res.redirect('/statement');
      }
    });

Вот как я обновляю транзакцияInfo

const db = req.db;
const collectionBling = db.get(collectionBlingBlaw);
collectionBling.update({
  _id: ObjectId(req.session.userId),
  "transactionInfo.transactionId": ObjectId(req.body.transTransId),
  "transactionInfo.transDate": req.body.transTransDate,
}, {
  $set: {
    "transactionInfo.$.transCat": req.body.transTransCat,
    "transactionInfo.$.transComment": req.body.transTransComment,
    "transactionInfo.$.transactiontModified": req.body.transTransComment,
    "transactionInfo.$.transactiontModifiedUser": moment().format('MMMM Do YYYY, h:mm:ss a')
  }
}, function(err, results) {
  if (err) {
    flashData.pageMesage = "Error updating" + req.body.transTransDesc;
    flashData.bgColor = "danger";
    flashData.info = err;
    req.flash('flashData', flashData);
    res.redirect('/statement');
  } else {
    console.log(results);
    flashData.pageMesage = "Update been good: " + req.body.transTransDesc;
    flashData.bgColor = "success";
    flashData.info = results;
    req.flash('flashData', flashData);
    res.redirect('/statement');
  }
})

Вот как я удаляюЗаявление

collection.update({
  "statementInfo.statementData.statement_id": ObjectId('5be32b29ee4c322140969fd5')
}, {
  $pull: {
    "statementInfo.$.statementData": {
      'statement_id': ObjectId('5be32b29ee4c322140969fd5')
    }
  }
}, function(err, results) {
  if (err) { // if err throw err
    console.log("results: " + JSON.stringify(err));
    flashData.pageMesage = "Error removing statement" + JSON.stringify(err.message);
    flashData.bgColor = "danger";
    flashData.info = err;
    req.flash('flashData', flashData);
    res.redirect('/statement');
  }
  if (results) {
    console.log("results: " + JSON.stringify(results));
    flashData.pageMesage = "Statement been removed: " + req.body.statementId;
    flashData.bgColor = "success";
    flashData.info = results;
    req.flash('flashData', flashData);
    res.redirect('/statement');
  }
});

Это схема, которую я разработал для проекта.

  // set newData to insert
  const user_id = ObjectId();
  const statement_id = ObjectId();
  const transactionId_id = ObjectId();
  const blingBlaw = {
    _id: user_id,
    userInfo: {
      userId: user_id,
      userFannyPack: req.body.fannyPack,
      userName: req.body.username,
      userPwd: req.body.pwd,
      userEmil: "",
      userGrup: "",
      userCreated: moment().format('MMMM Do YYYY, h:mm:ss a'),
      userModify: ""
    },
    statementInfo: [{
      statement_id: statement_id,
      statementName: "",
      statementType: "",
      statementDate: "",
      statementDesc: "",
      statementFileInfo: "",
      statementCreated: moment().format('MMMM Do YYYY, h:mm:ss a'),
      statementModified: "",
      statementModifiedtUser: ""
    }],
    transactionInfo: [{
      transactionId: transactionId_id,
      transactionDate: "",
      transactionDesc: "",
      transactionWithdraw: "",
      transactionDeposite: "",
      transactionBalance: "",
      transactiontModified: "",
      transactiontModifiedUser: "",
      statement_id: statement_id
    }],
    categoryInfo: [{
      _id: "",
      catName: "",
      catParent: "",
      catCreate: moment().format('MMMM Do YYYY, h:mm:ss a'),
      catModify: ""
    }]
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...