簡體   English   中英

如何添加新的 object 或推入數組 Mongodb Compass NodeJS Express(更新不是功能)?

[英]How do I add new object or push into array Mongodb Compass NodeJS Express (update is not a function)?

此時我嘗試查找在這種情況下有效的查詢,但隨后想更新 object。 所以我想檢查審查 object 是否存在,如果不存在,則首先創建該鍵名,然后將該 object 推送到數組中。 否則推入現有的 object 陣列中。

默認 object 看起來像(沒有評論對象):

在此處輸入圖像描述

 const mongoose = require('mongoose'); const musicSchema = mongoose.Schema({ id: { type: Number, required: true }, artist: { type: String, required: true }, title: { type: String, required: true }, release_year: { type: Number, required: true }, genre_id: { type: Number, required: true }, image_url: { type: String, required: true }, reviews: [{ id: { type: Number, required: true }, locale: { type: String, required: true }, rating: { type: Number, required: true }, comment: { type: String, required: true } }] }); const Music = mongoose.model("Music", musicSchema); // now we have to create our model console.log; module.exports = Music; // export our created model

 app.post('/addReview/:id', async (req, res) => { let idNumber = parseInt(req.params.id); // 501437 let reviewObject = req.body; // {id: "501437", locale: "nl", rating: 3, text: "helello"} try { const music = client.db('database').collection('music'); const query = { id: idNumber }; const musicSong = await music.findOne(query); await musicSong.update({ $push: { reviews: reviewObject } }); // error comes from here } catch (err) { console.log(err); } });

  • 檢查reviews字段是否不存在,然后將其初始化為空白數組
  • 將 object 推送到reviews
  • save()保存主文檔
app.post('/addReview/:id', async (req, res) => {
  let idNumber = parseInt(req.params.id);  // 501437
  let reviewObject = req.body; // {id: "501437", locale: "nl", rating: 3, text: "helello"}
  try {
    const music = client.db('database').collection('music');
    const query = { id: idNumber };
    let musicSong = await music.findOne(query);
    if (!Array.isArray(musicSong.reviews)) {
      musicSong.reviews = [];
    }
    musicSong.reviews.push(reviewObject);
    music.save();
  } catch (err) {
    console.log(err);
  }
});

使用updateOne()的第二個選項:

如果您使用更新方法,則不需要查找、檢查和保存操作,

app.post('/addReview/:id', async (req, res) => {
  const query = { id: parseInt(req.params.id) };
  let reviewObject = req.body;
  try {
    const music = client.db('database').collection('music');
    await music.updateOne(query, { $push: { reviews: reviewObject } });
  } catch (err) {
    console.log(err);
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM