将hashmap保存为mongoose?

时间:2016-04-02 00:00:56

标签: node.js mongoose mongoose-schema

我有一个像这样的架构

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

}, { minimize: false });

对于作为大型列表的项目,我决定使其成为哈希映射以更快地访问它。

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

我循环浏览了一堆html,当我遇到它时,我会解析并存储每个新项目。

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')}
    });
});

即使我没有错误。我的数据无法保存。这是因为我的新物品没有_id吗?我用_id尝试了它,它仍然没有保存。

1 个答案:

答案 0 :(得分:3)

从猫鼬5.1.0开始,有一个新类型Map。威奇做到了:

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

要使用它,只需:

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')}
    });
});

并获取它:

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