2

我有这样的架构

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 试了一下,还是没有保存。

4

1 回答 1

4

从 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');
});
于 2018-08-27T02:34:30.290 回答