【问题标题】:change bool value mongodb更改布尔值mongodb
【发布时间】:2021-04-23 22:37:23
【问题描述】:

我是 react 的初学者,我有一个小问题,我想更改一个 bool 值,它是 isApproved,所以管理员单击一个按钮并批准帖子,以便它可以显示在这里是我的代码。谁能帮帮我

这是改变isApproved值的函数

//@route put api/posts/approve/:id
//@desc approve post
//@access Private

router.post('/:id/approve', auth, async(req, res) => {
    console.log("action base de donne begin");
    Post.findById(req.params.id, (err, post) => {
        console.log(post.isApproved);
        if (err) {
            console.log(err);
        } else if (post.isApproved == false) {
            post.update({$set: {isApproved: true}});
            
        } else {
            post.update({$set: {isApproved: false}});
            
        }
    });
});

后模型:

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

// Create Schema
const PostSchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
    ref: 'users'
  },
  text: {
    type: String,
    required: true
  },
  name: {
    type: String
  },
  avatar: {
    type: String
  },
  isApproved: {
    type: Boolean,
    default: false
  },
  likes: [
    {
      user: {
        type: Schema.Types.ObjectId,
        ref: 'users'
      }
    }
  ],
  comments: [
    {
      user: {
        type: Schema.Types.ObjectId,
        ref: 'users'
      },
      text: {
        type: String,
        required: true
      },
      name: {
        type: String
      },
      avatar: {
        type: String
      },
      date: {
        type: Date,
        default: Date.now
      }
    }
  ],
  date: {
    type: Date,
    default: Date.now
  }
});

module.exports = Post = mongoose.model('post', PostSchema);

批准行动:


// Approve Approve 


export const approve = id => async dispatch => {
  
  
  try {
    console.log('action is begin');
    console.log(id);
    const res = await axios.post(`/api/posts/${id}/approve`);
    console.log('la valeur dans action est',res)
    dispatch({
      type: APPROVE_POST,
      payload: { id, isApproved: res.data }
    });
  } catch (err) {
    dispatch({
      type: POST_ERROR,
      payload: { msg: err.response.statusText, status: err.response.status }
    });
  }
};

后减速器

import {
  GET_POSTS,
  POST_ERROR,
  UPDATE_LIKES,
  DELETE_POST,
  ADD_POST,
  GET_POST,
  ADD_COMMENT,
  REMOVE_COMMENT,
  APPROVE_POST
} from '../actions/types';



const initialState = {
  posts: [],
  post: null,
  loading: true,
  error: {}
};

export default function(state = initialState, action) {
  const { type, payload } = action;

  switch (type) {
    case GET_POSTS:
      return {
        ...state,
        posts: payload,
        loading: false
      };
    case GET_POST:
      return {
        ...state,
        post: payload,
        loading: false
      };
    case ADD_POST:
      return {
        ...state,
        posts: [payload, ...state.posts],
        loading: false
      };
    case DELETE_POST:
      return {
        ...state,
        posts: state.posts.filter(post => post._id !== payload),
        loading: false
      };
    case POST_ERROR:
      return {
        ...state,
        error: payload,
        loading: false
      };
    case UPDATE_LIKES:
      return {
        ...state,
        posts: state.posts.map(post =>
          post._id === payload.id ? { ...post, likes: payload.likes } : post
        ),
        loading: false
      };
      case APPROVE_POST:
      return {
        ...state,
        posts: state.posts.map(post =>
          post._id === payload.id ? { ...post, isApproved: payload.isApproved } : post
        ),
        loading: false
      };
    case ADD_COMMENT:
      return {
        ...state,
        post: { ...state.post, comments: payload },
        loading: false
      };
    case REMOVE_COMMENT:
      return {
        ...state,
        post: {
          ...state.post,
          comments: state.post.comments.filter(
            comment => comment._id !== payload
          )
        },
        loading: false
      };
    default:
      return state;
  }
}

 case APPROVE_POST:
      return {
        ...state,
        posts: state.posts.map(post =>
          post._id === payload.id ? { ...post, isApproved: payload.isApproved } : post
        ),
        loading: false
      };

【问题讨论】:

  • 如果您使用标点符号并将您的问题文本分解成实际的句子,而不仅仅是单词串,这会有所帮助。坦率地说,我觉得花时间帮助那些没有努力让他们轻松理解他们寻求帮助的问题的人的动力为零。

标签: node.js reactjs mongodb redux


【解决方案1】:

{ "$eq": [ false, "$isApproved" ] } 将返回真或假

db.collection.update(
  {},
  [  { "$set": { "isApproved": { "$eq": [ false, "$isApproved" ] } } } ]
);

使用findByIdAndUpdate

演示 - https://mongoplayground.net/p/4kCEaEpuIko

【讨论】:

    【解决方案2】:

    我把代码改成这个,但我总是有一个错误的值

    router.post('/:id/approve', auth, async(req, res) => {
        console.log("action base de donne begin");
        Post.findById(req.params.id, (err, post) => {
            console.log(post.isApproved);
            if (err) {
                console.log(err);
            } else if (post.isApproved == false) {
                post.update(
                    {},
                    [  { "$set": { "isApproved": { "$eq": [ true, "$isApproved" ] } } } ]
                  );
                
            } else {
                post.update(
                    {},
                    [  { "$set": { "isApproved": { "$eq": [ false, "$isApproved" ] } } } ]
                  );
                
            }
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 2016-07-11
      • 2012-12-30
      • 1970-01-01
      • 2012-10-29
      • 2012-03-25
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多