簡體   English   中英

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

[英]I don't understand how to use the findOrCreate method with mongoose

遵循這個架構 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}
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM