Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Saving hashmap to mongoose?

I have a schema like so

var csData = new Schema({
    csgo_number: Number,
    last_updated: Number,
    items: {type: Object, default: {}}

}, { minimize: false });

Due to items being a large list I decided to make it a hash map to access it faster.

items:{
    item1: {
        price: 2.00
    },
    item2:{
        price: 1.00
    },
    item3:{
        price: 3.00
    }
}

I'm looping through a bunch of html i'm parsing and storing each new item when I come across it.

var item1 = 'awp'
csData.findOne({"csgo_number": 1}, function(err, csgoDB){
    csgoDB.items[item1] = {
        price: 2.00
    }


    csgoDB.save(function(err){
        if(err){console.log('something went wrong')}
    });
});

Even though I get no error. My data doesn't save. Is this because I don't have a _id for my new item? I tried it with an _id and it still didn't save.

like image 785
Garuuk Avatar asked Feb 15 '26 22:02

Garuuk


1 Answers

Since mongoose 5.1.0 there's a new type, Map. Wich does that:

var csData = new Schema({
    csgo_number: Number,
    last_updated: Number,
    items: {
        type: Map,
        of: String,
        default: {}
    }
}, { minimize: false });

To use it, just:

var item1 = 'awp'
csData.findOne({"csgo_number": 1}, function(err, csgoDB){
    csgoDB.items.set('item1.price', 2.00);

    csgoDB.save(function(err){
        if(err){console.log('something went wrong')}
    });
});

And to fetch it:

var item1 = 'awp'
csData.findOne({"csgo_number": 1}, function(err, csgoDB){
    var value = csgoDB.items.get('item1.price');
});
like image 102
Lucas Almeida Carotta Avatar answered Feb 18 '26 13:02

Lucas Almeida Carotta



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!