【发布时间】:2015-04-03 18:30:51
【问题描述】:
在我的 node.js 应用程序中,我需要将非结构化 JavaScript 对象存储在 MongoDB 中。我在 Mongoose 中指定了以下模型:
module.exports = mongoose.model('DBAllocation', {
from: Date,
expires: Date,
userSession: Object,
allocationTimestamp: Date,
allocationPriority: Number,
vmGroupID: String,
allocationRequestContent: Object
});
通过将userSession 和allocationRequestContent 的数据类型指定为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.session 和 authorizedRequest.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"
]
}
谢谢。
【问题讨论】:
-
试过 Schema.Types.Mixed (mongoosejs.com/docs/schematypes.html)?
-
是的。但仍然无法正常工作。似乎只接受一个简单的对象。当对象本身包含嵌套对象时,它会给出内部错误。
-
您能否将您遇到的错误的详细信息添加到您的问题中?
-
@JohnnyHK,我没有收到详细的错误信息!调试时,我只得到
Internal Error! Value is null -
@Deepal 根据您的更新,
authorizedRequest.requestContent中的某些内容似乎无法序列化为 BSON,以便可以将其存储在集合中。里面有什么?
标签: node.js mongodb mongoose javascript-objects