Как проверить, существует ли объект в mLab с помощью _id? - PullRequest
0 голосов
/ 10 октября 2019

Я работаю над угловым приложением с бэкэндом node.js, где моя архитектура выглядит следующим образом:

front-end => angular.service => бэкэнд узла => mLab DB

В настоящее время я пытаюсь вставить объект в БД при условии, что он еще не существует. Если это уже делает, это должно обновить. Эта функция будет доступна через кнопку с карточек в моем интерфейсе.

, чтобы дать более ясное понимание, вот некоторые из моего кода.

интерфейс: admin-edit-home.component.html

<a mdbBtn class='btn btn-md btn-primary' mdbWavesEffect (click)="addCard()">Add</a>

приведенный выше код является кнопкой, где я могу добавить карту в интерфейс. Приведенный ниже TS показывает, как работает код.

front-end: admin-edit-home.component.ts

addCard() {
  this.carousels.push(this.carousels.length);
}

Чтобы дать объяснение TScode, 'carousels' - это массив, который я использую для выполнения цикла * ngFor в моем HTML, где он представляет данные в формате карты. Он объявляется как:

carousels: any = [];

Таким образом, при добавлении длины в массив 'carousels', он представляет пустую карту без собранных данных, но все еще содержит элементы HTML из исходной карты, которая содержит предполагаемое обновлениефункция, которую я хотел бы иметь.

Моя проблема в том, как мне выполнить проверку существования объекта из серверной части и представить результаты обратно во внешний интерфейс? Я пробовал это,

back-end: api.js

router.route('/carousel/update/:id').put(function(req,res) {
   var data = req.body;
   const myquery = { _id: ObjectId(req.params.id) };

db.collection('home').updateOne(myquery, {
   $set: {
       "header" : data.header,
       "subheader" : data.subheader,
       "img" : data.img
   }

  })
  if (myquery === -1) {
  arr.push(obj);
  } else {
      arr[myquery] = obj
  }
}

Я знаю, что мой back-end код неправильный и не работает, но я просто хотелчтобы вы, ребята, имели визуализацию того, чего пытается достичь моя логика.

Кроме того, этот серверный код теперь должен быть доступен моей угловой службе через этот фрагмент кода ниже:

home.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable ({
  providedIn: 'root'
})

export class HomeService {

   constructor(private http: HttpClient) {}

   updateCard(id: string, header: string, subheader: string, img: string) {
       var json = {id: id, header: header, subheader: subheader, img: img}
       return this.http.put<any[]>(`./api/carousel/update/${id}`, json);  
   }
}

После этих попыток, чтобы вкратце изложить мою проблему, мне нужно проверить из базы данных, существует ли объект уже через ObjectId, а затем обновить его через мои поля ввода, но если нет, updateCard () должен создать еще один объект в моей базе данных. Я надеюсь получить помощь!

РЕДАКТИРОВАТЬ

 router.route('/carousel/update/:id').put(function (req, res) {
     var data = req.body;
     const myquery = { "_id": ObjectId };
    // console.log('header: ' + data.header + " id: " + data.id)
    console.log(req.params)
     db.collection("home").updateMany(myquery, {
         $set: {
             "img" : data.img,
             "header" : data.header,
             "subheader": data.subheader
         }
     }, (err, results) => {
        res.status(200).json({status: "ok"})
     })

 })

Это новый api.js . Пожалуйста, обратитесь.

...