我的猫鼬数组存在一些问题,这可能是由于我对库的了解不足,并且我在文档中找不到确切的答案。
对于初学者来说,我有我的模式和模型声明:
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默认添加的其他对象的情况下从数组中读取数据?将项目添加到现有模型的最佳方法是什么?
感谢您的帮助,谢谢。
答案 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(`","`);
});
}