【发布时间】:2018-01-16 13:07:22
【问题描述】:
我有一个使用 GET 请求从服务器获取数据的服务。我每 10 秒重复一次此请求,每次请求后我将这些数据保存到我的数据库中。我的代码附在下面。
但是我需要过滤从服务器接收到的新数据,以免在数据库中重复数据。我读到我需要使用upset: true 在我的数据库中进行更新,但我想我做错了什么。你能帮我完成这个任务吗?
app.js 代码:
const Tenders = require('./libs/mongoose');
const request = require('request');
let url = `http://public.api.openprocurement.org/api/2.4/tenders?offset=${new Date().toISOString()}+02.00`;
function getTenders() {
request(url, { json: true }, (err, res, body) => {
if (err) {
return console.log(err);
}
url = `http://public.api.openprocurement.org/api/2.4/tenders?offset=${body.next_page.offset}`;
const tendersList = [];
let tendersData = new Tenders({ tenderId: String, tenderDate: String });
body.data.forEach((item) => {
tendersData = {
tenderId: item.id,
tenderDate: item.dateModified,
};
tendersList.push(tendersData);
});
Tenders.findAll({ tenderId: tendersData.tenderId }, (err, tenderId) => {
if (!tenderId) {
Tenders.insertMany(tendersList)
.then((item) => {
console.log('Saved to db');
})
.catch((err) => {
console.log(err);
});
} else {
console.log('Data is already in db');
}
});
});
}
getTenders();
setInterval(getTenders, 10000);
以防万一 mongoose.js:
const mongoose = require('mongoose');
const config = require('../config');
mongoose.Promise = global.Promise;
mongoose.connect(
config.get('mongoose:uri'),
{ useMongoClient: true },
);
const tender = new mongoose.Schema({
tenderId: String,
tenderDate: String,
});
const Tenders = mongoose.model('Tenders', tender);
module.exports = Tenders;
我猜我的带有Tenders.find.... 和Tenders.insertMany 的代码只查找一项而不是全部。那么请您帮我插入我的第一部分数据,然后在数据库中使用来自服务器的新数据“更新”数据?
【问题讨论】:
标签: javascript node.js mongodb mongoose