В моето приложение 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