簡體   English   中英

通過 ID 推送到 mongoose 數組未獲取 ID

[英]Pushing to mongoose array by ID not getting ID

我正在嘗試將訂閱的類對象添加到我的 mongodb,但是,當我將新訂閱的類推送到數據庫時,它無法工作,因為它沒有獲取用戶 _id。

到目前為止,我已經嘗試過這段代碼以及 findone 等其他一些東西

const userSchema = new mongoose.Schema({
    email: String,
    password: String,
    secret: String,
    classes: [String]
});

const userModel = mongoose.model("Class", userSchema)

const newClass = req.body.subClass;
const id = req.user.id
    userModel.findById(id, function (err, user) {
        if (user) {
            console.log(user)
            db.users.update(
                { _id: id },
                { $push: { classes: newClass } }
            )
        } else {
            console.log(err)
        }
    })

任何幫助,將不勝感激 :)

我可以建議

  1. 將 update 更改為 findOneAndUpdate 的目的是處理“單一”文檔上的更新語句,以及檢索該“單一”文檔的內容。
  2. 在傳遞 id 之前將其轉換為 ObjectId
  3. 將 (db.users.update) db 更改為 userModel
const mongoose = require('mongoose'); 
const ObjectId = mongoose.Types.ObjectId;
userModel.findOneAndUpdate(
  { _id: new ObjectId(id) },
  { $push: { classes: newClass  } },
  { upsert: false, new: true }, // upsert looks to find a Message with that id and if it doesn't exist creates the Message if argument is true 
);

希望能幫到你

運行此文件節點 index.js 並在此幫助下更改代碼!

// index.js
const mongoose = require('mongoose');
const ObjectId = mongoose.Types.ObjectId;
const mongoDB = 'mongodb://127.0.0.1/test';
mongoose.connect(mongoDB, { useUnifiedTopology: true, useNewUrlParser: true,useFindAndModify: false });

const userSchema = new mongoose.Schema({
    email: String,
    password: String,
    secret: String,
    classes: [String]
});

(async function  createAndUpdate(){
    // create user
    const userModel = mongoose.model("Class", userSchema);
    const newUser = new userModel({
        email: 'user@gmail.com',
        password: 'password',
        secret: 'secret',
        classes: 'classes1'
    });
    await newUser.save();

    // update user
    const newClass = 'new-classes2';
    const id = newUser._id;
    await userModel.findOneAndUpdate(
        { _id: new ObjectId(id) },
        { $push: { classes: newClass  } },
        { upsert: false }
    );
})();

暫無
暫無

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

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