Съхранявайте неструктуриран JavaScript обект в MongoDB с Mongoose+Node.js

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

Благодаря ти.


person Deepal    schedule 04.02.2015    source източник
comment
Опитахте ли Schema.Types.Mixed ( mongoosejs.com/docs/schematypes.html)?   -  person joao    schedule 04.02.2015
comment
да Но все още не работи. Изглежда, че само прост обект ще бъде приет. Когато самият обект съдържа вложени обекти, той дава вътрешна грешка.   -  person Deepal    schedule 04.02.2015
comment
Можете ли да добавите подробности за грешката, която получавате към въпроса си?   -  person JohnnyHK    schedule 04.02.2015
comment
@JohnnyHK, не получавам подробна грешка! При отстраняване на грешки получавам само Internal Error! Value is null   -  person Deepal    schedule 04.02.2015
comment
@Deepal Въз основа на вашата актуализация изглежда, че има нещо в authorizedRequest.requestContent, което не може да бъде сериализирано в BSON, така че да може да се съхранява в колекцията. Какво съдържа това?   -  person JohnnyHK    schedule 04.02.2015
comment
@JohnnyHK, актуализирах въпроса си, включително съдържанието на authorizedRequest.requestContent. Как мога да разбера дали може да се сериализира в BSON?   -  person Deepal    schedule 04.02.2015
comment
@Deepal Проблемът вероятно е, че ключът $, тъй като $ е запазен знак в имената на полетата на MongoDB. Ще трябва да промените това.   -  person JohnnyHK    schedule 04.02.2015
comment
@JohnnyHK, Уау. Благодаря, че го посочихте, можете да включите коментара си като отговор, за да мога да приема. Благодаря много.   -  person Deepal    schedule 05.02.2015


Отговори (1)


Проблемът вероятно е ключът $ в обекта authorizedRequest.requestContent, тъй като имената на полетата на MongoDB не могат да започват с $.

Вижте документите за възможни заобиколни решения.

person JohnnyHK    schedule 05.02.2015