使用架构方法在 Mongoose For 循环中保存项目

2023-12-14

如果我附加任何额外的验证方法,我在保存通过 for 循环运行的项目时遇到问题。基本上,我正在构建一个 Instagram API 应用程序,允许编辑者删除不雅的照片。照片会以 20 张为一组从 Instagram 中提取并展示给编辑。如果编辑者点击一张照片,它首先会根据 ID 被放入“黑名单”数据库,然后从主照片数据库中删除。

为了不让列入黑名单的照片再次出现在 feed 上,在将项目保存到主照片数据库之前,需要根据黑名单检查照片的 Instagram ID。为此,我使用 Schema 方法。

现在的问题是我只将一张照片保存到数据库中。如果我去掉方法检查,那么我会得到全部 20 个。

这是我的主要创建控制器:

exports.create = function(req, res) {

var topic = req.body.topic || 'nyc';

var path = 'https://api.instagram.com/v1/tags/' + topic + '/media/recent?client_id=' + 'XXXXXXXXXX';


request.get({url: path}, function(err, response){

  if (err){
    console.log('Failed to get data: ', err);
    return res.status(400).json({error: 'Not allowed'});
  }

  else{

    // ------------------------------------------------
    // Make sure we have JSON
    //

    var body = JSON.parse(response.body);



    // ------------------------------------------------
    // Loop through each response
    //

    for (var i = 0; i < body.data.length; i++ ){
      var photoData = body.data[i];


      // ------------------------------------------------
      // If there is no caption, skip it
      //

      if (!photoData.caption){
        text = '';
      }
      else{
        text = photoData.caption;
      }

      // ------------------------------------------------
      // Create new photo object
      //

      var photo = new Photo({
        link: photoData.link,
        username: photoData.user.username,
        profilePicture: photoData.user.profile_picture,
        imageThumbnail: photoData.images.thumbnail.url,
        imageFullsize: photoData.images.standard_resolution.url,
        caption: text,
        userId: photoData.user.id,
        date: photoData.created_time,
        _id: photoData.id
      });

      photo.checkBlacklist(function(err, blacklist){

        if (!blacklist){
          photo.save(function(err, item){
            if (err){
              console.log(err);
            }

            console.log('Saved', item);
          })
        }

      });

      // -------------------------------------------------
      //
      // Save
      // 
      // -------------------------------------------------

    } // END FOR LOOP

    console.log('Photos saved');
    return res.json(201, {msg: 'Photos updated'} );
  }
});
};

这是我的照片架构:

'use strict';

var mongoose = require('mongoose'),
Schema = mongoose.Schema;

var Blacklist = require('../blacklist/blacklist.model');

var PhotoSchema = new Schema({
  created: {type: Date, default: Date.now()},
  date: String,
  link: String,
  username: String,
  profilePicture: String,
  imageThumbnail: {type: String, unique: true},
  imageFullsize: String,
  caption: String,
  userId: String,
  _id: {type: String, unique: true}
});


PhotoSchema.methods.checkBlacklist = function(callback){

  return Blacklist.findById(this._id, callback);

};


module.exports = mongoose.model('Photo', PhotoSchema);

奇怪的是,我在创建控制器中收到所有 20 个保存的控制台消息: console.log('已保存', 项目);

但实际上只保存了一张照片。有什么想法吗?

Thanks


当您必须对数组中的项目执行相同的异步任务时,不要使用常规的 for 循环。查看异步每个,它更适合您的场景,例如(只是else您的代码的一部分):

var body = JSON.parse(response.body);

async.each(body.data, function (photoData, callback) {

  // ------------------------------------------------
  // If there is no caption, skip it
  //

  if (!photoData.caption){
    text = '';
  }
  else{
    text = photoData.caption;
  }

  // ------------------------------------------------
  // Create new photo object
  //

  var photo = new Photo({
    link: photoData.link,
    username: photoData.user.username,
    profilePicture: photoData.user.profile_picture,
    imageThumbnail: photoData.images.thumbnail.url,
    imageFullsize: photoData.images.standard_resolution.url,
    caption: text,
    userId: photoData.user.id,
    date: photoData.created_time,
    _id: photoData.id
  });

  photo.checkBlacklist(function(err, blacklist){

    if (!blacklist){
      photo.save(function(err, item){
        if (err){
          console.log(err);
        }

        console.log('Saved', item);
        callback();
      });
    }

  });

}, function (error) {
  if (error) res.json(500, {error: error});

  console.log('Photos saved');
  return res.json(201, {msg: 'Photos updated'} );
});

不要忘记安装

npm install async

并要求async:

var async = require('async');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用架构方法在 Mongoose For 循环中保存项目 的相关文章

随机推荐

  • R data.table 使用标准名称创建新列

    我想根据比率计算为我的 data table 创建新列 我的变量的名称有点标准 所以我认为必须有一种方法可以轻松实现这一点数据表 但是我不知道如何实现这一点 以下是我的示例数据和代码 set seed 1200 ID lt seq 1001
  • 复数 FFT 然后逆 FFT MATLAB

    我正在使用 Matlab 中的 FFT 函数来尝试分析行波激光模型的输出 模型的时域形式为 实数 虚数 其思想是将 FFT 应用于复数输出 以获得频域中的相位和幅度信息 load time domain field data data lo
  • 为什么我不能使用 boost::variant 访问这个自定义类型?

    下面的代码 include
  • 如何通过 Gmail 使用简单的 SMTP 命令发送电子邮件?

    出于教育目的 我需要使用 SMTP 的基本且简单的规则通过 SMTP 服务器发送电子邮件 我能够使用smtp4dev I telnet localhost 25和 命令是 我想做同样的事情 使用 Gmail SMTP 服务器 但是 它需要身
  • 如何按两个值对这个元组列表进行排序?

    我有一个元组列表 2 Operation SUBSTITUTED 1 Operation DELETED 2 Operation INSERTED 我想用两种方式对此列表进行排序 首先按升序排列第一个值 即1 2 3 etc其次是按相反字母
  • 如何处理 Start-Job 中运行命令的错误?

    我正在编写一个自动化脚本 我有一个函数 它接受命令或可执行文件 我必须等到命令或可执行文件完成运行并在失败或通过时返回 我还想将输出写入文件 我正在尝试与Start Job cmdlet 我当前的代码 job Start Job scrip
  • 与对象更改通知相比,Google Club Pub/Sub 的可扩展性如何

    正如标题所问 当使用签名 URL 上传对象时 与 Google Cloud Storage 中的对象更改通知相比 Google Club Pub Sub 的可扩展性如何 在能够处理短时间内上传的许多对象方面 每种方法的比较如何 如果上传的对
  • 如何将 Robomongo 连接到 MongoDB

    我的运行系统中有 MongoDB 和 Robomongo 并且我使用 Robomongo 作为客户端 我已经在另一个系统上安装了 MongoDB 我将其视为服务器 并且我想将我的系统 作为客户端 的 Robomongo 连接到另一个系统 服
  • 将值添加到选定的多选

    我想知道是否可以动态添加新值选择 js多重选择 类似于标记的工作方式 我在另一个看到过SO post用户说这是可能的 他链接到一个example and a fork在 github 上 但我在实现这些方面遇到了一些困难 源代码是用 Cof
  • 使用开源库时,我们应该针对源代码还是二进制文件进行编译? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在项目中使用开源库 例如 SharpPcap 或 FakeItEasy 时 我们应该将源代码添加到解决方案中还是针对 DLL 进行编译并将它们放在解决方案中的目录中 您应该使用二进制文件进
  • 检查应用程序是否在前台或后台运行(使用同步适配器)

    我知道这是一个重复的问题 但我查遍了所有地方 找不到适合我的解决方案 所以 我有一个从 TMDB API 获取电影数据的应用程序 它使用同步适配器按页获取它 基本上它运行得很好 除非在应用程序打开且用户不在第一页时运行同步适配器的定期同步
  • MySQL 服务器在 Perl 爬行期间消失了

    我使用 WWW Mechanize 库来获取 URL 的内容并将其数据保存到 mysql 表中 但是当页面内容太大时 会出现以下错误消息 DBD mysql st 执行失败 MySQL 服务器已消失 F crawling perl test
  • 正则表达式删除字符串中的最后一个单词+附加字符

    我从服务器获取一个字符串 我必须使用正则表达式来解析它 我知道如何使用字符串函数 String split 等 来做到这一点 但不知道如何使用正则表达式 这是家庭作业要求中的 字符串看起来像这样 12345
  • 为什么该决策树每一步的值之和不等于样本数?

    我正在阅读有关决策树和装袋分类器的内容 并且我试图展示装袋分类器中使用的第一个决策树 我对输出感到困惑 from sklearn model selection import train test split from sklearn da
  • 为什么我收到 You do not have permission to call SpreadsheetApp.openById?

    我们有两张 AL 表 本地的和国家的 我正在尝试获取它 以便当我们当地的 AL 日历 完成时 数据会复制到国家日历中 检查编辑的单元格是否位于国家电子表格中某人的行中 然后将其复制到国家电子表格上的相应行中 我不断得到 您无权调用 Spre
  • 如何在 Android 中制作自定义键盘? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想做一个定制键盘 我不知道如何使用 XML 和 Java 来做到这一点 下图是我想做的键盘模型 它只需要数字 系统键盘 此答案告诉您如何制作可在用户安装在手机上的任何应用程序中
  • 快速字节校验和

    我有一个非常棘手的问题 我使用 iOS 设备将字节数组发送到 ble 设备 led 灯 效果很好 我有一个所有命令的文档 但中文翻译得很差 整个字节包的构建如下 命令前面 1字节 命令包长度 1字节 命令的ID 1字节 命令的控制部分 1字
  • 如何向我的 Facebook 登陆选项卡添加“喜欢”按钮?

    我的 Facebook 页面经过设置 以便向尚未 喜欢 该页面 并尝试查看该页面 的用户显示特定选项卡的内容 而不是默认的 墙 视图 这些用户到达的选项卡包含我制作的应用程序 这是一个简单的应用程序 列出了有关业务的信息 该应用程序正在使用
  • 鼠标滚轮滚动工具条菜单项

    我有一些包含许多菜单项的菜单 鼠标滚轮不会滚动它们 我必须使用键盘箭头或单击顶部和底部的箭头 是否可以使用鼠标滚轮滚动工具条菜单项 谢谢 您可以使用此类在应用程序范围内启用它 public class DropDownMenuScrollW
  • 使用架构方法在 Mongoose For 循环中保存项目

    如果我附加任何额外的验证方法 我在保存通过 for 循环运行的项目时遇到问题 基本上 我正在构建一个 Instagram API 应用程序 允许编辑者删除不雅的照片 照片会以 20 张为一组从 Instagram 中提取并展示给编辑 如果编