Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I save an empty array into mongodb using js

Basically I got my app up an running but I'm stuck with a problem: if I pass an object that contains an empty array to be saved, the array is not saved into the db. I'm not sure this is a problem in js or the mongo driver, but in order to save the empty array I need to pass the array like so: products: [''].

This is the structure of my mongo document:

_id: ObjectId(...),
name: 'String',
subcategories: [
    {
        subcategory: 'string',
        products: [
            {
                 name: 'string'
                 price: integer
            }
        ]
    }
]

So in my front-end I'm grabbing the whole document through an ajax call pushing a new object into the subcategories array. The new object looks like this:

{subcategory:'string', products:['']}

And this works okay until I need to insert a new object inside the array: Because I've grabbed the whole object, pushed the new object to the array, the previous one looks like this:

{subcategory: 'string'}

Having lost the mention to products:[] array in the process.

How can I get around this? I need to be able to have empty arrays in my object.

EDIT

What I did on front end: Got the whole object with $.get which returned:

var obj = 
_id: ObjectId(...),
name: 'String',
subcategories: [
    {
        subcategory: 'Subcategory1',
        products: [
            {
                 name: 'string'
                 price: integer
            }
        ]
    }
];

Then on the front end I've pushed the new object category inside the subcategories array:

data.subcategories.push({subcategory: 'Subcategory2', products: ['']})

Where subcat was a string with the category name. On my db I could see that I've successfully added the object:

var obj = 
_id: ObjectId(...),
name: 'String',
subcategories: [
    {
        subcategory: 'Subcategory1',
        products: [
            {
                 name: 'string'
                 price: integer
            }
        ]
    },
    {
         subcategory: 'Subcategory2'
         products: []
    }
];

The problem was when I wanted to add another subcategory, the previous one return empty:

var obj = 
_id: ObjectId(...),
name: 'String',
subcategories: [
    {
        subcategory: 'Subcategory1',
        products: [
            {
                 name: 'string'
                 price: integer
            }
        ]
    },
    {
         subcategory: 'Subcategory2'
    },
    {
         subcategory: 'Subcategory3'
         products: []
    },
];

Because at some point the empty array was removed from the object. Like I said, I did fix this in the front end, so the error jade was throwing has been addressed, but I still find odd that the products: [] was being removed from the document.

I'm new to MongoDb and node, not to mention that I'm also new with JS, so it might well be a feature that I'm unaware of.

like image 889
WagnerMatosUK Avatar asked Nov 11 '22 18:11

WagnerMatosUK


1 Answers

When passing empty arrays to Mongo they are interpreted as empty documents, {}. Zend Json encoder will interpret them as empty arrays []. I understand that it's not possible to tell which one is correct. Incase of empty arrays try posting as

Array[null]; instead of Array[];

This will be working fine

like image 118
Murthii Ch Avatar answered Nov 15 '22 04:11

Murthii Ch