[英]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
字段是否不存在,然后將其初始化為空白數組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.