Mongoose.model.find()始终返回空数组

时间:2020-05-17 21:25:35

标签: node.js mongodb express mongoose

mongoose express 库的帮助下,我使用 node.js 构建Web应用程序后端服务器。我的代码使用 express.Router()。get()在路由“ /”上侦听,当接收到“获取请求”时,它使用 mongoose.model从mongodb集合中获取数据.find()并将数据发送回去。

问题是,无论我尝试了什么, mongoose.model.find()都会返回一个空数组...

这是express.Router()。get()的代码:

const express = require("express");
const router = express.Router();

const AttackPattern = require("../models/attack_pattern"); //the model

router.get("/", (req, res) => {
  AttackPattern.find({}, function (err, docs) {
    if (err) {
      console.log("error!"); //there was an error...
    } else {
      console.log(docs); //fetch succeful
      res.status(200).send(docs);
    }
  });
});

这是模型的代码:

const mongoose = require("mongoose");

const attackPatternSchema = mongoose.Schema({
  _id: String,
  name: String,
  description: String,
  x_mitre_platforms: [String],
  x_mitre_detection: String,
  phase_name: String,
});

module.exports = mongoose.model(
  "AttackPattern",
  attackPatternSchema,
  "attack_pattern"
);

我已经看过Model.find() returns empty in mongooseMongoose always returning an empty array NodeJS,但没有发现运气...

重要提示:

  1. 集合的名称是与mongoose.model()的第三个参数匹配的“ attack_pattern”。
  2. 模式的字段名称和类型与集合的字段名称和类型的文档匹配。
  3. 与mongodb群集的连接成功(在另一个文件中建立)。
  4. 字段_id的类型为字符串,而不是ObjectId(文档_id字段仍具有唯一值,但不会自动生成)。

将不胜感激:)

1 个答案:

答案 0 :(得分:0)

在模型中删除参数Attack_pattern

module.exports = mongoose.model(
  "AttackPattern",
  attackPatternSchema
);

创建模型时,请通过新的Schema更改mongoose.model并声明_id属性,例如:

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

var attackPatternSchema = new Schema({
    _id: { type: Schema.ObjectId, auto: true },
    // others attributes
})
相关问题