【问题标题】:update a specific field inside a JSON typed field using mongoose on linux在 Linux 上使用 mongoose 更新 JSON 类型字段中的特定字段
【发布时间】:2015-03-28 10:21:30
【问题描述】:

我正在尝试更新 json 类型字段中的特定值。

我的文档架构如下所示:

character
{
    name: {type: string},
    experience: {type: json}
    ...
}

我确保体验总是包含一个带有 2 个字段的 json 对象:

{ unspent: number, total: number }

我正在尝试制作一个通用的更新方法,并且在 Windows 上运行良好:

'update': function (itemid, update, callback) {
    model.update({'id': itemid}, update, {multi: false}, callback);
}

更新得到一个 req.body.fields 对象,它是一个 json 对象,包含我想要更新的“字段”,例如

{'experience.total': 5}

当我在我的 Windows 开发盒上运行它时,它运行良好。然而,当我在我的 linux 登台服务器上尝试它时,猫鼬似乎没有得到它需要更新的内容。

我更新其他字段没有问题(例如我的示例中的“名称”)

谢谢!

【问题讨论】:

  • json 不是标准的 Mongoose 类型之一,您的意思是 Mixed
  • 据我所知,我使用的类型是 JSON... 'Character': mongoose.model('character',{ id: {unique: true, type: String}, type :{type:String},名称:{type:String},googleId:{type:String},播放器:{type:JSON},编年史:{type:JSON},状态:{type:String},经验:{类型:JSON} ....}
  • 我不知道我从哪里得到“JSON”类型的东西。可能是我开始的一个坏例子。我已经把类型改成了Schema.Types.Mixed,但是问题还是一样。
  • 好的。如果experience 总是包含unspenttotal 字段,就像你描述的那样,你为什么不在你的模式中定义它而不是使用Mixed
  • 边走边学。我已将其更改为体验:{未花费:字符串,总计:字符串},并且我已经清理/刷新了所有数据。但是,问题仍然存在:猫鼬默默地更新失败。

标签: json linux node.js mongodb mongoose


【解决方案1】:

经过一番挖掘并在 JohnnyHK 的帮助下找到解决方案:

不要使用 JSON 类型(我希望 mongoose 会抱怨我的架构无效) 当你知道你的类型是什么样子时,不要使用混合类型。

在我将架构更改为此之后:

experience: {
    unspent: String,
    total: String
    },

并使用更新将我的 .markModified 和 .Save() 功能恢复为原始形式,它起作用了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-11
    • 2019-10-06
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2021-04-30
    • 2020-07-30
    • 2021-01-10
    相关资源
    最近更新 更多