检查数组值,如果存在于 mongodb 集合中,则推送到新数组中

我直接连接到 mongodb 并使用 mongoose 连接,mongoose db 文件通过调用dbConnect(),并且我的查询工作正常。问题在于我稍后添加的标准数据库连接 ( const { db } = await connectToDatabase();) 来查询我无法将其转换为可接受的猫鼬模式的集合。


我的代码在顶部:


import { connectToDatabase } from "../../utils/mongodb"

import dbConnect from '../../utils/dbConnect'


dbConnect();


export default async (req, res) => {

  const { db } = await connectToDatabase();


  try{ ...

data我从 API 中获取一些数据,我需要迭代这个data.titles 并在 mongodb 集合“channels”(字段为“name”)中执行 a 操作find(),以便仅保留那些与集合项的字段名称匹配的 data.title s


我尝试的是这样的:


        var token = `https://www.googleapis.com/youtube/v3/subscriptions?part=snippet%2CcontentDetails&mine=true&maxResults=50&key=${process.env.GOOGLE_API_KEY}&access_token=${token}`;

        token = token.replace(/"/g, '');


        var url = await fetch(token);

        const subsData = await url.json();


        //* Save all followed channels names, imgs and ids in arrays

        var subsArray = [], idsArray = [], imgsArray = [];

        for(let i=0; i < subsData.items.length; i++){

          //* check the channel's name is in database

          // if ( Chann.findOne({ "name" : subsData.items[i].snippet.title }) ) {

          if ( db.channels.find({ name: subsData.items[i].snippet.title }) != null ) {

            idsArray.push(subsData.items[i].snippet.resourceId.channelId);

            subsArray.push(subsData.items[i].snippet.title);

            imgsArray.push(subsData.items[i].snippet.thumbnails.default.url);

          }

        }

但它抛出:TypeError: Cannot read property 'find' of undefined


正如您从代码中看到的,我也尝试使用 mongoose 代替,两者都在我的项目中配置,但使用 mongoose 模式它什么也没做,就好像它findOne总是正确的一样。所以它没有抛出任何错误,但基本上不起作用,数组中的所有通道都被接受。我想知道这是否是由于模式之间的不完美匹配而发生的,因为我从已经存在的 mongodb 数据手动重新创建了模式“Chann”,而且我不能 100% 确定我到处正确地编写了数组的对象。


胡说叔叔
浏览 142回答 2
2回答

潇潇雨雨

db.channels.find({&nbsp;name:&nbsp;subsData.items[i].snippet.title&nbsp;})&nbsp;!=&nbsp;null这不会按照您使用的方式工作。db.channels.find({&nbsp;name:&nbsp;subsData.items[i].snippet.title&nbsp;})返回一个Promise永远不会是的null。相反,你会想做类似的事情const&nbsp;result&nbsp;=&nbsp;await&nbsp;db.channels.find({&nbsp;name:&nbsp;subsData.items[i].snippet.title&nbsp;})if(!result.length)&nbsp;{ &nbsp;&nbsp;&nbsp;... }您可以使用回调、Promises 或 async/await 来等待数据库结果,我的示例正在使用,async/await但有一些选项。

摇曳的蔷薇

首先检查——if(subsData.items[i].snippet.title!= undefined && subsData.items[i].snippet.title!= null){&nbsp; &nbsp; // ....}else{&nbsp; &nbsp; console.log(...);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript