【发布时间】:2020-12-17 17:32:16
【问题描述】:
我通过 mongoose 直接连接到 mongodb,通过 dbConnect() 调用 mongoose db 文件,并且我的查询工作正常。问题在于我后来添加的标准数据库连接 (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{ ...
我从 API 获取了一些 data
我需要遍历这个 data.title 并在 mongodb 集合“通道”(字段为“名称”)中执行 find(),以便仅保留与集合项的字段名称匹配的那些 data.title
我尝试的是这样的:
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% 确定我在这里和那里正确地编写了数组的对象..
更新:
如下所示,我将其更改为:
var subsArray = [], idsArray = [], imgsArray = [];
for(let i=0; i < subsData.items.length; i++){
console.log("title "+subsData.items[i].snippet.title)
const result = await db.collection("Channels").find({ name: subsData.items[i].snippet.title })
console.log("result "+result)
if(!result.length) {
idsArray.push(subsData.items[i].snippet.resourceId.channelId);
subsArray.push(subsData.items[i].snippet.title);
imgsArray.push(subsData.items[i].snippet.thumbnails.default.url);
}
}
但它记录的是 [object Object] ,如果我添加到查找行 .toArray() 它会变成 [object promise] 并且如果我尝试记录 JSON.stringify result 它会抛出 TypeError: Converting circular structure to JSON
【问题讨论】:
-
我什至不知道,看起来很有趣。尽管我认为这里的问题是数据库调用,但实际上应该包含数组的 const 记录了一个空数组
标签: javascript node.js arrays mongodb mongoose