搜尋

首頁  >  問答  >  主體

javascript - mongoose保存報錯

// 我在用户Schema中创建了专栏数组(articles),专栏是对象,底下articles数组嵌套了文章对象,结构类似下图:
// User.articles = [专栏一, 专栏二 ...]
// 专栏一.articles = [ 文章一, 文章二 ...]
// 实际操作中,只要涉及到修改原有值,一保存就报错
// 如splice,pop,或者直接赋值都报错,但push就成功

// 找到专栏,对专栏文章进行splice可以成功修改,但保存操作时报错
user.articles[cindex].articles.splice(aindex, 1, newarticle) // cindex 专栏序号 aindex 文章序号
id = column.articles[aindex]._id
console.log("发布文章更新,id为:", id) // 能输出结果
user.save()

// 可成功修改,保存报错
user.articles[cindex].articles[aindex].name = 'asdfsadf'
user.save()

// 成功
column.articles.push({
    _id : column.articles[aindex]._id,
    name: 'asdfsdf'
})
user.save()

// 报错如下:
// Unhandled rejection Error
//     at model.wrappedPointCut [as save] (C:\nodejs\myblog\node_modules\mongoose\lib\services\model\applyHooks.js:111:29)
//     at User.findOne.then.user (C:\nodejs\myblog\models\UserActions.js:299:10)
//     at tryCatcher (C:\nodejs\myblog\node_modules\bluebird\js\release\util.js:16:23)
//     at Promise._settlePromiseFromHandler (C:\nodejs\myblog\node_modules\bluebird\js\release\promise.js:512:31)
//     at Promise._settlePromise (C:\nodejs\myblog\node_modules\bluebird\js\release\promise.js:569:18)
//     at Promise._settlePromise0 (C:\nodejs\myblog\node_modules\bluebird\js\release\promise.js:614:10)
//     at Promise._settlePromises (C:\nodejs\myblog\node_modules\bluebird\js\release\promise.js:693:18)

當我使用 save(err=>console.log(err)) 時,報錯versionkey錯誤,之後我禁用掉versionkey便暫時防止了這個錯誤的產生。
但終究還是沒有弄清楚這個問題的來由。也請各位大大詳解。

淡淡烟草味淡淡烟草味2709 天前995

全部回覆(2)我來回復

  • 阿神

    阿神2017-06-26 10:59:21

    對資料庫資料修改和保存都需要使用相關方法才行,不能說直接操作資料屬性,完了用save

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-26 10:59:21

    save方法有參數

    回覆
    0
  • 取消回覆