簡體   English   中英

在MondoDB中更新字段

[英]Updating a field in MondoDB

我正在編寫多用戶在線詞典。 我想實現一個領導委員會,一旦用戶添加一個單詞,ei的“ score”屬性就會增加。 我對如何執行有一個粗略的想法,並嘗試了一種解決方案,但是它不起作用。 你能指導我嗎?

Word API路線

const express = require('express');
const router = express.Router();
const Word = require('../../models/Word');
const User = require('../../models/User');

const validateWordInput = require('../../validation/word');
const passport = require('passport');

// @route  POST api/words
// @desc   Add words to profile
// @access Private
router.post(
  '/',
  passport.authenticate('jwt', { session: false }),
  (req, res) => {
    const { errors, isValid } = validateWordInput(req.body);

    // Check validation
    if (!isValid) {
      // Return any errors
      return res.status(400).json(errors);
    }

    Word.find({}).then(word => {
      if (
        word.filter(
          wrd =>
            wrd.ugrWordCyr.toString().toLowerCase() ===
            req.body.ugrWordCyr.toLowerCase()
        ).length !== 0
      ) {
        return res
          .status(404)
          .json({ wordalreadyexists: 'Word already exists' });
      } else {
        const newWord = new Word({
          user: req.user.id,
          ugrWordCyr: req.body.ugrWordCyr,
          rusTranslation: req.body.rusTranslation,
          example: req.body.example,
          exampleTranslation: req.body.exampleTranslation,
          origin: req.body.origin,
          sphere: req.body.sphere,
          lexis: req.body.lexis,
          grammar: req.body.grammar,
          partOfSpeech: req.body.partOfSpeech,
          style: req.body.style
        });

        newWord.save().then(word => res.json(word));
        User.update(
          { _id: '5cf0cb78b3105d1ba8e30331' },
          { $inc: { score: 1 } }
        );
      }
    });
  }
);

用戶模型

這是得分屬性所在的位置

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

// Create schema
const userSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  score: {
    type: Number,
    default: 0
  },
  avatar: {
    type: String
  },
  date: {
    type: Date,
    default: Date.now
  }
});

module.exports = User = mongoose.model('users', userSchema);

成功保存單詞后,我們應該更新用戶數

要更新相應用戶的分數,您可以執行以下操作:

newWord.save().then((word) => {

    //now update user model
    User.findOne({ _id: req.user.id }) <-- or an id you would like
        .then((foundUser) => {
             foundUser.score = foundUser.score + 1

             foundUser.save()
                .then((savedUser) => {
                    res.json({ word, savedUser })
                })
                .catch((err) => {
                    return res.status(400).json({ error: "could not add score"})
                })
        })
        .catch((err) => {
           return res.status(400).json({ error: "could not find user"})
        })

})

暫無
暫無

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

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