首页 > 解决方案 > 如何使用_id检查mLab中是否存在对象?

问题描述

我正在开发一个带有 node.js 后端的 Angular 应用程序,我的架构如下所示:

前端 => angular.service => 节点后端 => mLab DB

目前,我正在尝试将一个对象推送到数据库中,前提是它尚不存在。如果它已经这样做了,它应该更新。可以通过我前端卡片中的按钮访问此功能。

为了更清楚地理解这里是我的一些代码。

前端:admin-edit-home.component.html

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

上面的代码是一个按钮,我可以在其中向界面添加卡片。下面的 TS 显示了代码的工作原理。

前端:admin-edit-home.component.ts

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

为了解释 TS 代码,'carousels' 是一个数组,我用它在我的 HTML 中执行 *ngFor 循环,其中它以卡片格式显示数据。它被声明为:

carousels: any = [];

因此,在将长度推送到“轮播”数组时,它会显示一张没有收集数据的空卡片,但仍拥有原始卡片中的 HTML 元素,其中包含我想要的假定更新功能。

我的问题是,如何从后端检查对象是否存在并将结果呈现回前端?我试过这个,

后端: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
  }
}

我知道我的后端代码是错误的并且不起作用,但我只是想让你们对我的逻辑试图实现的目标有一个可视化。

此外,我的 Angular 服务现在应该可以通过下面的这段代码访问这个后端代码:

家庭服务.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。请参考。

标签: javascriptnode.jsangulartypescriptmlab

解决方案


推荐阅读