Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Saving an object in mongodb

Tags:

meteor

I am trying to save variant options as an object, something like that: {'1' : {optionTitle: 'title', optionPrice: 12}, '2': {....}} //schema

RestMenuVariants.attachSchema(new SimpleSchema({
    restRefId: {type: String},
    createdBy:{type: String},
    title: {type: String},
    options: {type: Object},
    sortId: {type: String, optional: true},
    createdAt: {type: Date}

}));

//part of the method addMenuVariantItem

return RestMenuVariants.insert({
            restRefId: restId,
            createdBy: Meteor.userId(),
            createdAt: new Date(),
            title: title,
            options: options,
            sort_id: sortId
        });

// part of the event for loop which creates the object

  variantOptions[i] = {optionTitle: $(element).val(), optionPrice: $(elementPrice).val()};
}

// and calling the method

Meteor.call('addMenuVariantItem', this._id, this.createdBy, variantTitle, variantOptions, function(error, result){.....})

I don't get any check or other errors, the variant is saved but when I look for the item at the console i see that the options is an empty object: //var cursor = RestMenuVariants.findOne({_id: id}); //console.log(cursor.options)

Object {}

What am I missing? Thanks.

like image 689
Avi A Avatar asked Mar 13 '26 01:03

Avi A


1 Answers

It looks like variantOptions is being created as an array but your schema only expects an object.

Change:

options: {type: Object}

to

options: {type: [Object], blackbox: true },

in your schema definition.

The blackbox: true option tells simple-schema to ignore the structure of the objects being put into the options array.

Also note that an array is != a nested object with numbered keys as you have in your description. You won't get:

{
  '1': {optionTitle: 'title', optionPrice: 12},
  '2': {....}
}

Instead you'll see:

[
  { optionTitle: 'title', optionPrice: 12 },
  {....}
]
like image 88
Michel Floyd Avatar answered Mar 14 '26 21:03

Michel Floyd



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!