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默认添加的其他对象的情况下从数组中读取数据?将项目添加到现有模型的最佳方法是什么?
感谢任何帮助,谢谢。
回答如下:如果你想对更新过程有更多的控制权,你可以这样做,在mongoose文件中它建议你可以先查询你想要更新的项目/文件,一旦查询了那个文件,你就可以进行更改对它来说,如果它包含一个数组,你可以推送它或从它弹出或什么...
它在你的掌控之中
所以,
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(`","`);
});
}
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默认添加的其他对象的情况下从数组中读取数据?将项目添加到现有模型的最佳方法是什么?
感谢任何帮助,谢谢。
回答如下:如果你想对更新过程有更多的控制权,你可以这样做,在mongoose文件中它建议你可以先查询你想要更新的项目/文件,一旦查询了那个文件,你就可以进行更改对它来说,如果它包含一个数组,你可以推送它或从它弹出或什么...
它在你的掌控之中
所以,
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(`","`);
});
}