我不明白如何将 findOrCreate 方法与猫鼬一起使用



遵循此架构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);
};

我一直不明白一个方法什么时候需要参数,回调函数需要什么样的参数。

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

在你的情况下,你想检查是否存在一个由参数给定标题的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}
});

相关内容

最新更新