【问题标题】:Mongoose update doesn't work猫鼬更新不起作用
【发布时间】:2018-05-14 04:39:19
【问题描述】:

我正在尝试将blockDate 添加到用户数据库中,但下面的代码没有进行任何更改。我检查了 data.usernameblockDate 是有效值。我从res 变量中得到{ ok: 0, n: 0, nModified: 0 }。我怎样才能弄清楚这个请求有什么问题?

router.post('/account/block', async (ctx, next) => {
    let data = ctx.request.body
    let fixedDate = parseInt(data.days)
    let blockDate = DateTime.local().plus({days: fixedDate}).toISO()
    let param = {
        search: { username: data.username},
        update: { $set: {blockDate: blockDate}}
    }

    try {
        console.log(param)
        let res = await User.update(param.search, param.update, {multi: true})
        console.log("res", res)
    } catch (e) {
        console.log("err", e)
    }
})

【问题讨论】:

  • 您是否检查过更新的查询是否与任何文档匹配?如果没有,它将不会更新任何内容。
  • @Florian 是的,它确实匹配了一个文档
  • let test = await User.find(param.search) 是否为您退回文件?还有什么类型是blockDate?对于日期的 Afaik,您必须提供 Date 对象。
  • @kentor 是的。 blockDate 的类型是日期。并且查询的 blockDate 是'2017-12-01T19:51:10.059+09:00' 我怎样才能使它成为日期类型?

标签: javascript node.js mongodb mongoose koa-router


【解决方案1】:

如果没有看到你的猫鼬模型,我无法告诉你这是否应该是一个约会。

如果它具有 Date 类型,您的 mongoose 验证器可能会过滤它,这可能是没有更新发生的原因。您可以使用 moment 将字符串转换为日期。例如(包括您可能喜欢或不喜欢的其他一些“改进”):

router.post('/account/block', async (ctx, next) => {
    const data = ctx.request.body
    const fixedDate = parseInt(data.days)
    const blockDateString = DateTime.local().plus({days: fixedDate}).toISO()
    const blockDate = moment(blockDateString)
    const param = {
        search: { username: data.username},
        update: { blockDate }
    }

    try {
        console.log(param)
        const res = await User.update(param.search, param.update, {multi: true})
        console.log("res", res)
    } catch (e) {
        console.log("err", e)
    }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    相关资源
    最近更新 更多