使用 Mongoose+Node.js 在 MongoDB 中存储非结构化 JavaScript 对象

Store unstructured JavaScript object in MongoDB with Mongoose+Node.js

在我的 node.js 应用程序中,我需要在 MongoDB[=46= 中存储非结构化 JavaScript 对象].我在 Mongoose:

中指定了以下模型
module.exports = mongoose.model('DBAllocation', {
    from: Date,
    expires: Date,
    userSession: Object,
    allocationTimestamp: Date,
    allocationPriority: Number,
    vmGroupID: String,
    allocationRequestContent: Object
});

通过指定userSessionallocationRequestContent的数据类型为类型Object,我想保存一个JavaScript对象(不指定它的结构) 到 MongoDB 并按原样检索它。但是当我将模型保存到数据库中时,出现内部错误。我尝试存储以下项目:

var allocation = new Allocation({
                        _id: allocationID,
                        from: Date.now(),
                        expires: null,
                        userSession: authorizedRequest.session,
                        allocationTimestamp: Date.now(),
                        allocationPriority: <some number>,
                        vmGroupID: <some number>,
                        allocationRequestContent: authorizedRequest.requestContent
                    });

authorizedRequest.sessionauthorizedRequest.requestContent 是两个 JavaScript 对象。但是当我用 {} 替换它们时,模型被成功保存。我听说过 strict 参数,我们可以用它来存储非结构化数据,但我怀疑我是否可以用它来实现我所需要的。有没有办法完成这个呢?任何帮助将非常感激。

更新:

我发现 authorizedRequest.session 是一个 MongoDB 模型,我将其替换为 authorizedRequest.session.toObject() 并将 authorizedRequest.requestContent 替换为一个简单的对象,例如 {'cat': '123', 'dog':'456'} 保存成功。无法弄清楚发生了什么。

authorizedRequest.requestContent 包括以下对象。

{
        "group":[
            {
                "vm_count":[
                    "10"
                ],
                "image":[
                    {
                        "type":[
                            "iso"
                        ],
                        "id":[
                            "280b40d0-6644-4e47-ac7c-074e2fa40cd4"
                        ]
                    }
                ],
                "cpu":[
                    {
                        "cores":[
                            "1"
                        ],
                        "frequency":[
                            "1"
                        ],
                        "unit":[
                            "GHz"
                        ],
                        "architecture":[
                            "x86"
                        ]
                    }
                ],
                "min_memory":[
                    {
                        "size":[
                            "2"
                        ],
                        "unit":[
                            "GB"
                        ]
                    }
                ],
                "min_storage":[
                    {
                        "primary":[
                            "5"
                        ],
                        "unit":[
                            "GB"
                        ]
                    }
                ],
                "network":[
                    {
                        "min_bandwidth":[
                            "8"
                        ],
                        "unit":[
                            "mbps"
                        ]
                    }
                ],
                "priority":[
                    "3"
                ],
                "allocation_time":[
                    {
                        "schedule":[
                            {
                                "date":[
                                    {
                                        "$":{
                                            "year":"",
                                            "month":"",
                                            "date":""
                                        }
                                    }
                                ],
                                "time_from":[
                                    ""
                                ],
                                "time_to":[
                                    ""
                                ]
                            }
                        ]
                    }
                ]
            }
        ],
        "session_id":[
            "3deb1bb861f34b527e6709c655fff139b36c2dc43d8b3e29e3914bf8b23ce069"
        ]
    }

谢谢。

问题可能是 authorizedRequest.requestContent 对象中的 $ 键,因为 MongoDB 字段名称不能以 $.

开头

有关可能的解决方法,请参阅 the docs