【问题标题】:Can I save a JS object (with methods) in MongoDB?我可以在 MongoDB 中保存 JS 对象(带有方法)吗?
【发布时间】:2018-10-12 04:11:25
【问题描述】:

我有一些对文本格式化方法和 css 样式进行编码的对象,我想将它们保存在 MongoDB 集合中(使用 Mongoose)。这些对象是这个的更复杂的版本:

const myStyle = {
    book: {
        templates: ["/authors/. ", "/title/. ", "/date/. "],
        authors: {
            format: formatAuthors
        },
        title: {
            format: formatTitle,
            style: {fontStyle: "italic"}
        }
    }
}

有谁知道如何将这种东西发送到服务器并将其保存在 MongoDB 集合中?根据 Mongoose 文档,Object 不是有效的 schemaType,所以我不能直接将其保存为 JS 对象。

【问题讨论】:

  • 取决于您的实际用例,但在大多数情况下,您希望将方法存储在应用程序级别,因此您可以只将方法名称存储在数据库中,然后调用您想要的方法基于数据库中的名称。

标签: javascript mongodb object mongoose


【解决方案1】:

您可以通过 Schema.methods 字段添加方法。

SchemaName.methods.methodName = function(){...}

还请查看此示例 here,了解基本的猫鼬用法。

【讨论】:

  • 我需要在前端添加方法,然后将对象发送到服务器。这可能吗?
  • @Brian JSON 没有方法,那么您将如何对其进行序列化呢?而且这通常似乎不是一个好主意。您要解决的实际问题是什么?
  • 这不是它的工作原理,本质上您需要通过 POST 请求(或套接字)将信息作为 JSON 发送到后端,后端将其存储在数据库中。您可以将函数的文本发送到后端,但正如@jonrsharpe 指出的那样,JSON 实际上并不支持方法。
  • 我不确定序列化是什么意思。我有一个 MongoDB 集合,其中包含包含一堆字符串的文档。在前端,我将 MongoDB 文档提供给一个函数,该函数返回一个根据 myStyle 格式化和样式化的 React 组件。我现在有 3 种不同的样式(如 myStyle)供用户选择,我想制作一个表单,以便用户可以制作自己的样式并将其保存到数据库以供以后使用。因此,例如,用户可以从下拉菜单中选择一种格式,然后使用预先存在的函数填充 myNewStyle.book.format。这有意义吗?
【解决方案2】:

Object 不是有效的猫鼬模式类型,但Mixed 是。

一个“随心所欲”的 SchemaType,它的灵活性是在权衡 它更难维护。混合可通过 Schema.Types.Mixed 或通过传递一个空的对象字面量。

您可以使用上面的链接了解更多信息。

在您的情况下,只要您要保存的数据是有效的 JS 对象,您就可以插入它。

但请注意,由于它是 schema-less type,因此在使用 Mixed 时存在一些性能限制,并且您需要在更改时调用 .markModified(path),如文档中所述。

【讨论】:

    【解决方案3】:

    不,您不能将方法保存到 mongodb

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 2015-12-01
      • 2011-07-24
      • 2023-01-25
      • 2018-07-06
      • 2022-09-24
      • 2015-05-28
      • 2010-11-20
      • 1970-01-01
      相关资源
      最近更新 更多