使用 Mongoose+Node.js 在 MongoDB 中存储非结构化 JavaScript 对象
Posted
技术标签:
【中文标题】使用 Mongoose+Node.js 在 MongoDB 中存储非结构化 JavaScript 对象【英文标题】:Store unstructured JavaScript object in MongoDB with Mongoose+Node.js 【发布时间】: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,以便可以将其存储在集合中。里面有什么?
【参考方案1】:
问题可能是 authorizedRequest.requestContent
对象中的 $
键,因为 MongoDB 字段名称不能以 $
开头。
请参阅the docs 了解可能的解决方法。
【讨论】:
以上是关于使用 Mongoose+Node.js 在 MongoDB 中存储非结构化 JavaScript 对象的主要内容,如果未能解决你的问题,请参考以下文章
是否有任何允许使用 mongoose 驱动程序 API 的 Node.js 嵌入式数据库?
在 Node.js Mongoose 中,我想更新每个字段……我该怎么做?
node.js + express.js:使用 mongodb/mongoose 处理会话
如何让 node.js 使用 mongoose 连接到 mongolab