【问题标题】:Iterate Array of Objects, and save each to MongoDB迭代对象数组,并将每个对象保存到 MongoDB
【发布时间】:2017-04-26 04:01:01
【问题描述】:

在从 Facebook 端点接收到每个对象后,我想将数组中的每个对象保存/插入到我的 MongoDB 中。

如何遍历返回的对象数组,然后将其保存到我的 mongoDB? :)

来自我的 Route 的代码,我使用 superagent 从 Facebook API 接收数据

var express = require('express');
var router = express.Router();
var request = require('superagent')
var utils = require('../utils')

router.get('/facebook', function(req, res, next) {

  var url = "https://graph.facebook.com/v2.9/xxxxxxxx"

  request
    .get(url)
    .set('Accept', 'application/json')
    .end(function(err, result){
      var parse = JSON.parse(result.text)
      res.json({
        confirmation: 'success',
        response: parse
      })
    });

});

module.exports = router;

每个对象如下所示:

"confirmation": "success",
"response": {
"data": [
{
"message": "Søger  et godt hjulsæt til Max 1000\nkr.1,000 - Løsning, Vejle, Denmark\n\nVed at ser er en masse fine hjulsæt er er i overskud der ude er der nogen der har et rigtig fint hjulsæt  i vil sælge mig ?",
"from": {},
"permalink_url": "https://www.facebook.com/groups/306677009409252/permalink/1333896396687303/?sale_post_id=1333896396687303",
"type": "photo",
"created_time": "2017-04-25T14:26:39+0000",
"picture": "https://scontent.xx.fbcdn.net/v/t1.0-0/q81/s130x130/18157109_10155237818408609_6730263000530603997_n.jpg?oh=e4198809641ce4549592065f9ce1d522&oe=5993A162",
"id": "306677009409252_1333896396687303",
"attachments": {}
},
{
"message": "Bontrager cykelhjelm\nkr.250 - Lemvig\n\nNy cykelhjelm  bontrager starvos str S\n51-57 cm ny og i original emballage. Ny pris 649 kr",
"from": {
"name": "Tanja Olsen",
"id": "10155372412188754"
},
"name": "Photos from Tanja Olsen's post",
"permalink_url": "https://www.facebook.com/groups/306677009409252/permalink/1333870013356608/?sale_post_id=1333870013356608",
"type": "photo",
"created_time": "2017-04-25T13:49:26+0000",
"picture": "https://scontent.xx.fbcdn.net/v/t1.0-0/s130x130/18118873_10155371971413754_3345993522211660552_n.jpg?oh=de0d10dc9e0589789e023819402ef399&oe=598FAE09",
"id": "306677009409252_1333870013356608",
"attachments": {}
}]

我的模型/架构

var mongoose = require('mongoose')

var FeedSchema = new mongoose.Schema({
    type: {type: String, default: ''},
    title: {type: String, default: ''},
    image: {type: String, default: ''},
    description: {type: String, default: ''},
    timestamp: {type: Date, default: Date.now}
})

module.exports = mongoose.model('FeedSchema', FeedSchema)

我尝试过但还没有成功

var express = require('express');
var router = express.Router();
var request = require('superagent')
var utils = require('../utils')
var Feed = require('../models/Feed')

router.get('/facebook', function(req, res, next) {

  var url = "https://graph.facebook.com/v2.9/XXXXXXX"
  var bulk = Feed.initializeUnorderedBulkOp();

  request
    .get(url)
    .set('Accept', 'application/json')
    .end(function(err, result){
      var parse = JSON.parse(result.text)

      var object = parse.data

      array.forEach((object) => {
        bulk.insert({
          type: object.type,
          title: object.title,
          image: object.image,
          description: object.description
        })
      })
      bulk.execute();
  });


});

module.exports = router;

【问题讨论】:

  • 你为什么要迭代对象,你是否希望在将对象插入到你的数据库之前改变它们。另外,您的模型架构是什么样的?你有什么理由不能使用 , $pushAll' 'Bulk.insert()' ?
  • 我想保存数组中的每个对象,然后我必须正确地遍历每个对象,还是错误的方法?我用模型更新了帖子
  • 好的,听起来您想映射数组并返回具有所需属性的对象数组。然后,您可以执行 bulk.insert 以一次插入所有对象。见docs.mongodb.com/manual/reference/method/Bulk.insert
  • 太棒了,但是如果我想在保存数据之前更改数据,那我不能使用批量操作吗?
  • 检查我创建的答案

标签: javascript node.js mongodb express superagent


【解决方案1】:

您可以遍历数组,然后批量执行所有对象。

var bulk = db.items.initializeUnorderedBulkOp();
array.forEach((object) => {
  bulk.insert({
    type: object.type,
    title: object.title,
    image: object.image,
    description: object.description,
    timestamp: object.timestamp
  })
})
bulk.execute();

【讨论】:

  • 太棒了,谢谢,我应该在.end之后放置它吗?同样在 var bulk = db.items.initializeUnorderedBulkOp() 中,我应该用我的模型或数据库替换 db?
  • 两者都是。数据返回后直接做即可。
  • 很酷,谢谢,我尝试了你的建议,但我似乎无法让它工作,你能检查一下我在帖子中添加的代码吗? :)
  • 您仍然需要回复,例如:res.send(result.text)array 应该是您的数组,我只是使用数组作为占位符。我猜 parse 是数组
  • 然后如何从这里返回? res.send(json 等)
猜你喜欢
  • 2020-05-30
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多