【问题标题】:Mongoose always returns an empty array in NodeJSMongoose 在 NodeJS 中总是返回一个空数组
【发布时间】:2021-12-27 19:45:43
【问题描述】:

我正在尝试提取 MongoDB Atlas 上 products 集合中的所有 products。我得到的只是空数组。

我与数据库的连接正确。

我不确定模型以及我如何使用 Mongoose。

这是我的联系方式...connectDb.js

import mongoose from "mongoose";
const connection = {};

async function connectDb() {
  if (connection.isConnected) {
    console.log("Connection in progress");
    return;
  }
  const db = await mongoose.connect(process.env.MONGO_SRV, {
    useCreateIndex: true,
    useFindAndModify: false,
    useNewUrlParser: true,
    useUnifiedTopology: true,
  });
  console.log("DB Connected");
  connection.isConnected = db.connections[0].readyState;
}

export default connectDb;

这是我的架构..../models/Product.js

import mongoose from "mongoose";
import shortid from "shortid";

const { String, Number } = mongoose.Schema.Types;

const ProductSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  price: {
    type: Number,
    required: true,
  },
  description: {
    type: String,
    required: true,
  },
  sku: {
    type: String,
    unique: true,
    required: true,
    default: shortid.generate(),
  },
  mediaUrl: {
    type: String,
    required: true,
  },
});

// Check for an existing `models.Product` ... then run the product schema
export default mongoose.models.Product ||
  mongoose.model("products", ProductSchema);

这是我的查询..../api/products.js

import Product from "../../models/Product";
import connectDb from "../../utils/connectDb";

connectDb();

export default async (req, res) => {
  const products = await Product.find({});
  console.log(`products are ... ${products}`);
  res.status(200).json(products);
};

这是我的数据库

这是控制台中的结果...

根据 Mongoose 文档,如果 db.connections[0].readyState} 返回 1... 表示已连接 Connection Doc

【问题讨论】:

  • 我阅读了其他论坛并进行了以下更改以确保没有重复... 1)我将猫鼬更新到最新 2)我使用 .find({}) 而不是 .find()
  • 您确定连接到正确的数据库吗?
  • 您从应用程序的哪个部分运行查询(我在帖子中看到了查询定义的一部分)?
  • 我知道连接很好,因为console.log("DB Connected");成功运行
  • @RobertMoskal 我为connections.readyState 添加了console.log(),证明我已连接。

标签: node.js mongodb mongoose mongodb-atlas


【解决方案1】:

检查您的env var MONGO_SRV。确保您的连接 URL 与相关数据库有关。

【讨论】:

  • 就是这样... MongoDB Atlas 为您提供了一个名为 myFirstDatabase 的默认数据库的连接...您需要更改它... ``"mongodb+srv://username:密码@dataname.asdf.mongodb.net/myFirstDatabase?retryWrites=true&w=majority"`
猜你喜欢
  • 2012-12-20
  • 2021-10-22
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多