Firebase Firestore хранит дубликаты данных - Node.js - PullRequest
0 голосов
/ 07 марта 2020

Мой проект - приложение для подачи новостей. Я могу успешно сохранять данные, полученные из API, в Firebase. Тем не менее, у меня есть дубликаты новостей, сохраненные в моей базе данных.

Как я могу предотвратить это. Ниже мой код:

// fetch news api
getData = (req, res) => {
return request(newsURL)
.then(news => (news.articles))
.then(infos => {infos.map((info) => {
    const newsDoc = {
        author: info.author,
        content: info.content,
        description: info.description,
        publishedAt: info.publishedAt,
        source: info.source.name,
        title: info.title,
        url: info.url,
        urlToImage: info.urlToImage,
        likeCount: 0,
        commentCount: 0
    }
    db.collection("feeds").add(newsDoc)
        .then((doc) => {
    const finalNews = newsDoc;
    finalNews.feedsId = doc.id;
    // res.json(finalNews)
})
.catch(err => console.error(err))
})})
};

Я думаю, что уникальным идентификатором всех новостных данных является URL.

Вопрос в этом посте - Пропускать дубликаты в базе данных Firebase, связан с моим , но я могу заставить его работать

Пожалуйста, как мне сохранить уникальные новостные данные без дубликатов

См. пример данных из базы данных Firebase:

// original
{
    "feedsId": "Cjy5lW6g6StTVj1GjpQk",
    "author": "El Confidencial",
    "content": "Germán Loera, un conocido 'youtuber' en Mçexico de 25 años, ha sido condenado a 50 años de prisión por un delito de secuestro cometido en Chihuaha en 2018. Los secuestrados reclamaron la cantidad de dinero del rescate en bitcoin. Según ha informado la Fiscalí… [+1153 chars]",
    "description": "Germán Loera, de 25 años, ha sido condenado a 50 años de prisión junto a otros cinco hombres por secuestrar en 2018 a una abogada",
    "publishedAt": "2020-03-04T17:45:00Z",
    "title": "A prisión un 'youtuber' mexicano por un secuestro y pedir el rescate en bitcoins",
    "url": "https://www.elconfidencial.com/amp/mundo/2020-03-04/prision-youtube-mexico-secuestro-bitcoin_2482519/",
    "urlToImage": "https://www.ecestaticos.com/imagestatic/clipping/5c9/56e/5c956e35512404b3022b56dbe0b80c3b/a-prision-un-youtuber-mexicano-por-un-secuestro-y-pedir-el-rescate-en-bitcoins.jpg?mtime=1583343920",
    "likeCount": 0,
    "commentCount": 0
},

// duplicate
{
    "feedsId": "MqqFnixBwQmA0CoBzwr2",
    "author": "El Confidencial",
    "content": "Germán Loera, un conocido 'youtuber' en Mçexico de 25 años, ha sido condenado a 50 años de prisión por un delito de secuestro cometido en Chihuaha en 2018. Los secuestrados reclamaron la cantidad de dinero del rescate en bitcoin. Según ha informado la Fiscalí… [+1153 chars]",
    "description": "Germán Loera, de 25 años, ha sido condenado a 50 años de prisión junto a otros cinco hombres por secuestrar en 2018 a una abogada",
    "publishedAt": "2020-03-04T17:45:00Z",
    "title": "A prisión un 'youtuber' mexicano por un secuestro y pedir el rescate en bitcoins",
    "url": "https://www.elconfidencial.com/amp/mundo/2020-03-04/prision-youtube-mexico-secuestro-bitcoin_2482519/",
    "urlToImage": "https://www.ecestaticos.com/imagestatic/clipping/5c9/56e/5c956e35512404b3022b56dbe0b80c3b/a-prision-un-youtuber-mexicano-por-un-secuestro-y-pedir-el-rescate-en-bitcoins.jpg?mtime=1583343920",
    "likeCount": 0,
    "commentCount": 0
},

1 Ответ

1 голос
/ 07 марта 2020

Сначала вы можете проверить, существует ли документ в базе данных:

let citiesRef = db.collection('feeds');
let query = citiesRef.where('title', '==', "A prisión un 'youtuber' mexicano por un secuestro y pedir el rescate en bitcoins").get()
  .then(snapshot => {
    if (snapshot.empty) {
        console.log('No matching documents.');
        db.collection("feeds").add(newsDoc).then((doc) => {
        const finalNews = newsDoc;
        finalNews.feedsId = doc.id;
        })
        .catch(err => console.error(err))
    }  
  })
  .catch(err => {
    console.log('Error getting documents', err);
  });

Итак, сначала проверьте, содержит ли коллекция feeds документ с title, равным A prisión un 'youtuber' mexicano por un secuestro y pedir el rescate en bitcoins, затем, если снимок пуст, добавьте новый документ.

https://firebase.google.com/docs/reference/js/firebase.firestore.QuerySnapshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...