Mongoose对象字段分配不起作用

时间:2016-01-26 09:16:04

标签: javascript node.js mongodb mongoose

我需要更新有限数量的结果,因为我有以下代码:

// `places` variable is a `.find` result
async.mapSeries(places, function(p, msCallback){
    if(!p.stats){
        p.stats = { 'impressions': 0 }
    }
    if(!p.stats.impressions){
        p.stats.impressions = 0
    }

    // This is what I want to update
    p.stats.impressions += 1

    console.log(p.stats) // { views: 10, pulse: 30, impressions: 0 }

    p.save(function(e){
        // Never logged
        if(e) log('[places][_in] No se ha actualizado la impresión', 'error')
        // Always logged
        console.log('Saved') // Saved
        return msCallback()
    })
}, function(err){
    // Never logged
    if(err) log('[places][_in] Error al actualizar impresión')
    return sCallback(null, places)
})

注意:数据库中的每个位置都有stats.impressions字段,其值为0

更新 还尝试使用forEach

places.forEach(function(p){
    if(!p.stats){
        p.stats = { 'impressions': 0 }
    }
    if(!p.stats.impressions){
        p.stats.impressions = 0
    }
    p.stats.impressions += 1
    log(p.stats)
    p.save(function(e){
        if(e) log('[places][_in] No se ha actualizado la impresión', 'error')
        log('Guardado')
    })
})

解决

模型中的字段不同(错过了结尾s):

'stats': {
    // Lots of stat fields
    'impression': { type: Number, default: 0 }

1 个答案:

答案 0 :(得分:0)

对于调试我会添加日志记录保存回调中保存的对象也记录错误e因为如果有错误我认为你想知道哪个错误。我也不确定你为什么不在实际项目上调用保存操作来保存像place.save()

save(function(e,val){
    // Never logged
    if(e) console.log(e)
    // Log here your new saved Item
    if(val)console.log(val)
    // Always logged  
    console.log('Saved') // Saved
    return msCallback()
})