如何通过ID查找值在猫鼬数组中添加值?

时间:2019-08-25 12:24:24

标签: node.js mongoose mongoose-schema

我想在订单产品ID数组中添加数据

我试图通过按用户ID查找数组来推送数组,然后将其添加到products_id中,但是我无法添加数据。

User.findById(user_id,(err,user)=>{
        if(err) throw err;
        const lastOrderId = user.order.slice(-1)[0]._id
        //console.log(cb.order.slice(-1)[0]._id);

    User.update({'order[0]._id': lastOrderId}, {$push: {'order.0.$.products_id': 123}},{safe:true,upsert:true})


    /*User.findOneAndUpdate({'_id' : user_id, 'order._id': lastOrderId} 
    ,{$push: [{'order[0].products_id': [123123]}]},{safe:true,upsert:true})*/
})

我的用户架构

 const userSchema = mongoose.Schema({
        _id:  mongoose.Types.ObjectId,
        user_name: {type:String,require: true},
        email:  {type:String, require: true},
        password: {type:String,require:true},
        full_name: {type:String},
        order: [{
            _id: mongoose.Types.ObjectId,
            products_id: [],
            date: {
                type: Date,
                default: Date.now
            }
        }]
    })

更新后我想要

const userSchema = mongoose.Schema({
        _id:  mongoose.Types.ObjectId,
        user_name: {type:String,require: true},
        email:  {type:String, require: true},
        password: {type:String,require:true},
        full_name: {type:String},
        order: [{
            _id: mongoose.Types.ObjectId,
            products_id: [5d5d7a7ea0c4aaf6212993ec, 5d627a962a5c637e7a0d5d1c, 5d627a49fa24ba7d15451afb],
            date: {
                type: Date,
                default: Date.now
            }
        }]
    })

1 个答案:

答案 0 :(得分:0)

您可以为此使用arrayFilter。您可以这样做。

 User.update({user_id},{$set: { 'order.$[ord]': lastOrderId },
 $push: {'order.$[ord].products.$[prd]':123}
 }, {
 arrayFilters: [{'_id': user_id}]
 })