В моем приложении 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"
]
}
Спасибо.
Internal Error! Value is null
- person Deepal   schedule 04.02.2015authorizedRequest.requestContent
есть что-то, что нельзя сериализовать в BSON, чтобы его можно было сохранить в коллекции. Что это содержит? - person JohnnyHK   schedule 04.02.2015authorizedRequest.requestContent
. Как я могу определить, можно ли его сериализовать в BSON? - person Deepal   schedule 04.02.2015$
, поскольку$
является зарезервированным символом в именах полей MongoDB. Вам нужно будет изменить это. - person JohnnyHK   schedule 04.02.2015