NodeJS 将散列表保存到 Mongoose ?

c3frrgcw  于 2023-03-17  发布在  Node.js
关注(0)|答案(1)|浏览(117)

我有一个这样的模式

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

}, { minimize: false });

由于条目是一个很大的列表,我决定将其作为一个散列Map来更快地访问它。

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,但仍然没有保存。

but5z9lq

but5z9lq1#

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

相关问题