Как проверить, существует ли значение в данных, полученных от API, прежде чем вставлять его в БД

Мне трудно записывать данные, полученные от 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)
 }
}
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
214
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Привет, наверное, лучше установить unique: trueиндексацию на вашей схеме. Таким образом, у вас не будет повторяющихся значений.

Другие вопросы по теме