我正在尝试更新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 ,所以它不起作用,是否还有其他方法可以将对象添加到数组(如果不存在)并可以增加(如果存在)。