我有一個為 DiscordJS 創建公會條目的函式,但是當腳本啟動時,如果該函式被多次呼叫,它會創建大約 400 個重復檔案,它通過 ID 創建并且 ID 是唯一的,所以這是不正常的
我的架構結構只有一個 ID 型別 String 并且 unique 為 true
client.createGuild = async guild => {
const exist = await Guild.findOne({ id: guild.id });
if(!exist) {
await Guild.create({ id: guild.id }); // new Guild().save() keep duplicate too
}
}
看起來 if 陳述句不存在
uj5u.com熱心網友回復:
const Schema = mongoose.Schema;
const FooSchema = new Schema({
id: { type: String, index: true, unique: true }
});
const Foo = mongoose.model('Foo', FooSchema);
Foo.createIndexes();
如果集合已經存在。通過 atlas 或 cmd 手動為集合創建索引。
uj5u.com熱心網友回復:
您可以將getData和createData函式合二為一。這是示例:
const mongoose = require('mongoose');
async function getData(Guild, guild) {
if (!mongoose.connection.readyState) await mongoose.connect('MONGO_URL'); // In case you haven't connect to database
const data = await Guild.findOne({ id: guild.id }); // get data from database
if (!data) {
return new Guild({
id: guild.id,
}); // If no data exists for the guild, return new model
}
return data; // If the data already exists, return that
}
現在,如果您想從 mongodb 獲取資料,只需呼叫該函式。如果沒有,它會自動創建并保存一個新的。
如果您仍然有任何問題或您已經得到了您需要的東西,請發表評論。確保呼叫該函式,await否則它不會回傳資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/450016.html
標籤:javascript mongodb 猫鼬 mongodb查询 不和谐.js
上一篇:如何將物件保存到貓鼬檔案
