Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以在MongoDB中保存JS对象(使用方法)吗?_Javascript_Mongodb_Object_Mongoose - Fatal编程技术网

Javascript 我可以在MongoDB中保存JS对象(使用方法)吗?

Javascript 我可以在MongoDB中保存JS对象(使用方法)吗?,javascript,mongodb,object,mongoose,Javascript,Mongodb,Object,Mongoose,我有一些对文本格式方法和css样式进行编码的对象,我想将它们保存在MongoDB集合中(使用Mongoose)。这些对象是更复杂的版本: const myStyle = { book: { templates: ["/authors/. ", "/title/. ", "/date/. "], authors: { format: formatAuthors }, title: {

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

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

有人知道如何将此类内容发送到服务器并保存到MongoDB集合中吗?根据Mongoose文档,Object不是有效的schemaType,所以我不能直接将其保存为JS对象

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

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

另请看一下这个示例,了解mongoose的基本用法。

否,您无法将方法保存到mongodb

对象
不是有效的mongoose架构类型,但它是

作为一个“随遇而安”的SchemaType,它的灵活性取决于 它更难维护。可通过以下两种方式获得混合 Schema.Types.Mixed或通过传递空对象文本

您可以通过上面的链接了解更多信息

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


但是,请注意,由于它是一种无模式的
类型
,因此在使用Mixed时存在一些性能限制,并且在更改时需要调用
.markModified(path)
,如文档中所述。

我需要在前端添加方法,然后将对象发送到服务器。这可能吗?@Brian JSON没有方法,那么您将如何序列化它?而且这通常看起来不是个好主意;您试图解决的实际问题是什么?这不是它的工作原理,本质上您需要通过POST请求(或套接字)将信息作为JSON发送到后端,后端将存储在数据库中。您可以将函数的文本发送到后端,但正如@jornsharpe所指出的,JSON实际上不支持方法。我有一个MongoDB集合,其中的文档包含一组字符串。在前端,我将MongoDB文档提供给一个函数,该函数返回一个根据myStyle格式化和样式化的React组件。我现在有3种不同的样式(比如myStyle),用户可以从中选择,我想制作一个表单,这样用户就可以创建自己的样式,并将其保存到数据库中供以后使用。因此,例如,用户可以从下拉菜单中选择一种格式,然后使用预先存在的函数填充myNewStyle.book.format。这有意义吗?取决于您的实际用例,但在大多数情况下,您希望在应用程序级别存储方法,因此您可以只在数据库中存储方法名称,例如,然后根据数据库中的名称调用所需的方法。