我不明白如何在猫鼬中使用findOrCreate方法

时间:2018-11-10 16:06:31

标签: javascript node.js methods mongoose find

遵循此模式cap.model.js:

const mongoose = require('mongoose');
const findOrCreate = require ('mongoose-findorcreate')
const Schema = mongoose.Schema;

let CapSchema = new Schema ({
  title: {type: String},
  list: {type: Array}
});

CapSchema.plugin(findOrCreate);

module.exports = mongoose.model('Cap', CapSchema);

我想从具有以下数据的get('/ url /:param1')中检索数据:

  1. 查找列表中包含param1的文档,并以数组形式返回其标题。

  2. 找到标题为param1的文档,并返回其列表。或者,如果不存在,请创建文档。在这两种情况下,还都返回其标题。

然后我要console.log: 一侧是标题(2),另一侧是由标题(1)和列表(2)组成的数组。

我的问题是我找不到或不了解findOrCreate(https://www.npmjs.com/package/mongoose-findorcreate)方法以及必须使用的参数。

目前我的代码如下:

在route.js中:

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

const cap_controller = require('../controllers/cap.controller');

router.get('/:param1', cap_controller.cap_get);

module.exports = router;

在cap.controller.js中:

const Cap = require('../models/cap.model');

const foc = Cap.findOrCreate({},
  function(err, cap) {
    console.log(req.params.word + ' has been created !', word.main);
    },
    'title list');

exports.cap_get = function (req, cb) {
  let capTitle = req.params.param1;
  cb(capTitle);
  };

而且我不了解方法何时需要参数以及回调函数需要什么样的参数。

1 个答案:

答案 0 :(得分:0)

cap.controller.js 中有很多错误。首先,为什么foc方法不在cap_get方法之外?其次,您从不调用foc方法,为什么?

在您的情况下,您要检查是否存在具有{params给定的标题的Cap,如果不是这种情况,请创建并添加它。

您可以这样简单地实现:

exports.cap_get = function (req, res, next) {
  let capTitle = req.params.param1;

  Cap.findOrCreate({ title: capTitle }, function(err, cap) {
    if (err) return next(err);

    console.log(capTitle + ' has been created !');

    res.status(200).json({ title: capTitle });
  });
};

cap_get只是具有其(req, res, next)签名的快速回调,而findOrCreate的第一个参数是主键,因此如果此键不存在大写字母(标题)它将创建它,否则它将返回文档。

您必须确保上限的标题唯一,以避免潜在的问题:

let CapSchema = new Schema ({
  title: {type: String, unique: true},
  list: {type: Array}
});