猫鼬更新文档数组中的对象或添加新对象(如果未找到)

时间:2018-10-24 09:49:40

标签: node.js mongodb mongoose mongodb-query

我正在尝试更新date数组中特定visitedOn的计数器,如果该数组中的对象不存在,则需要将其添加到数组中。

  • 这是我的VisitedCount模式

    var visitCounterSchema=new Schema({
        profile:{ type: Schema.Types.ObjectId, ref: 'profile' },
        counter:{type:Number,default:0}, // Total Number of counter
        visitedOn:[ ] // Counter with particular Month { "counter" : 0,"date" : ISODate("2018-08-30T18:30:00.000Z")}
    });
    
  • 我已经在Profile模式的PostSave上保存了VisitedCounter记录。

    profileSchema.post('save', function(doc) {
        var data = {
            profile:doc._id,
            counter:0, // Total counter
            visitedOn:[{
                date: new Date(`${(new Date()).getMonth()+1}/01/${(new Date()).getFullYear()}`), // date will be the first of current month
                counter:0 // Counter for that particular month. 
            }]
        }
        var visitsCounters = new VisitsCounter(data);
        visitsCounters.save(function (err, dta) {
            if (err) {
                console.log('error occured..' + err);
            }
        });
    });
    
  • 在保存配置文件时,它将保存访问计数记录,如下所示

    {
        "_id" : ObjectId("5bd021378a2680487bf201c5"),
        "profile" : ObjectId("5bd021378a2680487bf201c4"),
        "visitedOn" : [ 
            {
                "counter" : 0,
                "date" : ISODate("2018-09-30T18:30:00.000Z")
            }
        ],
        "counter" : 0,
        "__v" : 0
    } 
    

现在要 增加 ,可以在visitedOn数组中存在的特定日期的计数器正常工作

VisitsCounter.findOneAndUpdate({
        profile: req.params.id,
        "visitedOn.date":  new Date(`${(new Date()).getMonth()+1}/01/${(new Date()).getFullYear()}`)
    }, {
        $inc: {
            counter: 1,
            "visitedOn.$.counter": 1
        }
    },{
        new: true            
    },
    function (er, dt) {            
        if (er) {
            console.log('error occured..' + er);
        } else {
            return res.json(dt);
        }
    });

但是要添加 Date Counter ,如果不存在,则必须按照MongoDB文档使用$ addToSet,但不要按照我的要求添加记录。

    {
        $addToSet: {
            "visitedOn": {
                'date': new Date(`${(new Date()).getMonth()+1}/01/${(new Date()).getFullYear()}`),
                'counter': 1
            }
        },
    }

-这是因为我有 visitedOn.date ,所以它不起作用,是否还有其他方法可以将对象添加到数组(如果不存在)并可以增加(如果存在)。

0 个答案:

没有答案