使用 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
});
通过指定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"
]
}
谢谢。
问题可能是 authorizedRequest.requestContent
对象中的 $
键,因为 MongoDB 字段名称不能以 $
.
开头
有关可能的解决方法,请参阅 the docs。
在我的 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
});
通过指定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"
]
}
谢谢。
问题可能是 authorizedRequest.requestContent
对象中的 $
键,因为 MongoDB 字段名称不能以 $
.
有关可能的解决方法,请参阅 the docs。