[英]Mongoose array and subarray update
我有一個模型:其中stats.d是當前日期,t和u是一些統計數據。
name: string,
stats: [{
d: {type: date, default: moment().format('MM/DD/YYYY')},
t: number,
u: number,
}],
total: number
我想做的是更新,檢查日期是否今天是今天今天的增量t,如果今天的日期不存在,則使用當前日期和起始t點創建或添加到stats數組中。 這樣我就可以按日期獲得統計信息。 這是我嘗試過的。
model.findOneAndUpdate({_id:req.params._id}, {$set:{"stats.d": date}, $inc: {total: 1, "stats.t": 1}}, {upsert:true}, function(err, data){
//success
});
但這是行不通的。 我收到以下錯誤:
can't append to array using string field name: t","code":13048,"ok":0
有什么可以指出的問題嗎?
我認為您無法在一個update
查詢中執行此操作。
但是您可以使用javascript
:
model.findOne(
{
_id: ObjectId("req.params._id")
},
function(err, data){
var isDateFound = false;
for (var i = 0; i < data.stats.length; i++) {
if (data.stats[i].d === date) {
isDateFound = true;
data.stats[i].t++;
break;
}
}
if (!isDateFound) {
data.stats.push({
d: date,
t: 1,
u: 0
})
}
data.total++;
model.save(data) // or data.save() should work as well
});
在沒有upsert
要求的情況下,可以增加匹配的數組元素:
db.test.update(
{
_id: ObjectId("req.params._id"),
'stats.d': date
},
{
$inc: {
'stats.$.t': 1,
'total': 1
}
}
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.