存储重复数据的Firebase firestore--Node.js
我的项目是一个新闻提要应用程序。我可以成功地将从API获取的数据保存到firebase。但是,我的数据库中保存了重复的新闻数据 我怎样才能防止这种情况。请参见下面我的代码:存储重复数据的Firebase firestore--Node.js,node.js,firebase,firebase-realtime-database,google-cloud-firestore,google-cloud-functions,Node.js,Firebase,Firebase Realtime Database,Google Cloud Firestore,Google Cloud Functions,我的项目是一个新闻提要应用程序。我可以成功地将从API获取的数据保存到firebase。但是,我的数据库中保存了重复的新闻数据 我怎样才能防止这种情况。请参见下面我的代码: // fetch news api getData = (req, res) => { return request(newsURL) .then(news => (news.articles)) .then(infos => {infos.map((info) => { const news
// 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
},
您可以先检查数据库中是否存在文档:
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);
});
因此,首先检查提要
集合是否包含一个文档,该文档的标题
等同于一个比特币上的“youtuber”墨西哥por un secuestro y pedir el rescate en bitcoins
,然后如果快照为空,则添加一个新文档
是的,它在工作。谢谢