Мне трудно записывать данные, полученные от api, в db. Я успешно получил данные, а затем должен записать их в БД. Дело в том, чтобы проверить, существует ли цитата уже в моей коллекции. Проблема, с которой я сталкиваюсь, заключается в том, что каждое значение вставляется в мою коллекцию, независимо от того, существует оно или нет.
const { MongoClient } = require('mongodb')
const mongoUrl = 'mongodb://localhost/kanye_quotes'
async function connectToDb() {
const client = new MongoClient(mongoUrl, { useNewUrlParser: true })
await client.connect()
db = client.db()
}
async function addQuote(data) {
await connectToDb()
try {
const collection = db.collection('quotes')
let quotes = [];
quotes = await collection.find({}).toArray()
if (quotes = []) { // I added this piece of code because if not check for [], no values will be inserted
collection.insertOne(data, (err, result) => {
if (err) {
return
}
console.info(result.insertedId);
return
})
}
quotes.forEach(quote => {
if (quote.quote !== data.quote) { // I compare received data with data in collection, it actually works fine(the comparison works as it supposed to)
collection.insertOne(data, (err, result) => {
if (err) {
return
}
console.info(result.insertedId);
})
} else console.info('repeated value found'); // repeated value gets inserted. Why?
})
}
catch (err) {
console.info(err)
}
}
Привет, наверное, лучше установить unique: true
индексацию на вашей схеме. Таким образом, у вас не будет повторяющихся значений.