【问题标题】:push object array in mongodb using mongoose使用 mongoose 在 mongodb 中推送对象数组
【发布时间】:2021-06-06 14:36:34
【问题描述】:

这是我的预订架构

const mongoose = require('mongoose')
const schema = mongoose.Schema;

let booking = {
    statusNumber: { type: Number },
    service: {
        hair: {
            avaliable: { type: Number },
            accepted: { type: Number },
            acceptedBy: [{
                artistId: { type: String },
                noOfServices: { type: Number }
            }]
        },
        makeUp: {
            avaliable: { type: Number },
            accepted: { type: Number },
            acceptedBy: [{
                artistId: { type: String },
                noOfServices: { type: Number }
            }]
        },
    }
}
module.exports = mongoose.model('booking', booking)

我正在尝试使用以下代码更新我的预订

const acceptBooking = {
    method: "POST",
    path: "/artist/acceptBooking",
    handler: (req, res) => {
        console.log(req.payload)
        services.booking.get({ _id: req.payload.bookingId }, (err, result) => {
            if (err || result.lenght == 0) {
                res("error")
            } else {
                let hairAcceptedBy = {
                    artistId: req.payload.techId,
                    noOfServices: req.payload.hair
                }
                let makeUpAcceptedBy = {
                    artistId: req.payload.techId,
                    noOfServices: req.payload.makeUp
                }
                console.log(hairAcceptedBy)
                console.log(makeUpAcceptedBy)
                let updateObject = {
                    service: {
                        hair: {
                            avaliable: result[0].service.hair.avaliable - req.payload.hair,
                            accepted: (result[0].service.hair.accepted == undefined ? 0 : result[0].service.hair.accepted) + req.payload.hair,
                            $push:{acceptedBy: hairAcceptedBy}
                        },
                        makeUp: {
                            avaliable: result[0].service.makeUp.avaliable - req.payload.makeUp,
                            accepted: (result[0].service.makeUp.accepted == undefined ? 0 : result[0].service.makeUp.accepted) + req.payload.makeUp,
                            $push:{acceptedBy: makeUpAcceptedBy}
                        }
                    }
                }

                services.booking.update({ _id: req.payload.bookingId }, updateObject, (err, affected, result) => {

                    console.log("AFFECTED>>>>>", affected)
                    console.log("RESULT>>>>>", result);
                    res("booking done")
                })

            }
        })

我的更新函数看起来像

exports.update = (data, updateData, callback) => {
    console.log('mongo log for update function', data)
    modelUser.update(data, updateData, callback);

}

我的更新功能正在运行,更新可用并被接受,但 不推入acceptedBy数组

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    这个方法适合我,你可以用这个

    modelUser.findByIdAndUpdate(
            info._id,
            {$push: {"messages": {title: title, msg: msg}}},
            {safe: true, upsert: true, new : true},
            function(err, model) {
                console.log(err);
            }
        );
    

    【讨论】:

    • 你能参考这个链接stackoverflow.com/questions/15621970/…我从这里试过并且为我工作。
    • 不起作用我认为主要问题是我在同一个查询中推送 2 个数组。
    • 您可以为 $push 运算符指定多个字段 db.collection.update( { _id :1 }, { $push : { array1 : "1", array2 : "5" }} )
    • shekhar 在上述情况下我该怎么做
    • modelUser.update( { _id :1 }, { $push : { array1 : "1", array2 : "5" }} )
    猜你喜欢
    • 2018-06-17
    • 2019-03-28
    • 1970-01-01
    • 2020-06-04
    • 2019-04-08
    • 1970-01-01
    • 2020-02-05
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多