猫鼬模型,有效地清洗/分析阵列

时间:2019-02-13 00:01:37

标签: arrays node.js mongodb mongoose

我的猫鼬数组存在一些问题,这可能是由于我对库的了解不足,并且我在文档中找不到确切的答案。

对于初学者来说,我有我的模式和模型声明:

const gConfig = new Schema({ aList:  Array, maxChanLimit: Number }), globalConfiguration = mongoose.model('globalConfig', gConfig);

我有我的命令,该命令获取数组,解析出_id,然后将新项推入数组,并覆盖数据库中的现有项。

    if((message.author.id === g.ownerID) && (g.id.toString() === tocGuild) && message.content.startsWith("!updatealist")) 
{ 
    let mc = message.content.replace("!updatealist ", "");
    globalConfiguration.findOneAndUpdate({},{$push: {"aList":mc }}, { upsert: true }, function(err, data) { 
        if (err) return console.log(err); 
            var str = JSON.stringify(data); str = str.replace(RegExp(/"_id"|"__v"|'/g),""); var arr = str.split(`","`);
        });
}

我觉得必须有一种更好的方法来做,我已经根据阅读的内容尝试过类似的事情:

globalConfiguration.findOneAndUpdate({},{$push: {"-_id aList":mc }}

但是,这并未从数组中删除_id。我想我是怎么做的,但是我知道它效率不高,而且根本不是动态的,在代码方面也非常庞大,可以使用库进行简化。 >

实际上,用Mongoose从模型中正确读取数组的最佳方法是什么?您如何在没有Mongoose默认添加的其他对象的情况下从数组中读取数据?将项目添加到现有模型的最佳方法是什么?

感谢您的帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

如果您想对更新过程有更多的控制,可以这样做,在猫鼬文档中,建议您首先查询要更新的项目/文档,一旦查询到该文档/文档,就可以了。可以对其进行更改(例如,如果它包含数组),则可以对其进行推送或从中弹出或进行任何操作。

由您控制

所以

   if((message.author.id === g.ownerID) && (g.id.toString() === tocGuild) && message.content.startsWith("!updatealist")) 
{ 
    let mc = message.content.replace("!updatealist ", "");
    globalConfiguration.findOne({"your query"}, function(err, data) { 
        if (err) throw (err); 
            data.array.push("something");

            data.save();// save it again with updates
            var str = JSON.stringify(data); str = str.replace(RegExp(/"_id"|"__v"|'/g),""); var arr = str.split(`","`);
        });
}