簡體   English   中英

貓鼬數組和子數組更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM