Javascript mongodb更新文档后,返回旧值

Javascript mongodb更新文档后,返回旧值,javascript,node.js,mongodb,promise,es6-promise,Javascript,Node.js,Mongodb,Promise,Es6 Promise,这是我的路线。我正在尝试删除文档中的项目。正在删除该项,但它返回旧值。例如: Allposts有一个带有posts的数组:[postid:{type:String},…] 我正在尝试使用$pull删除一个特定的帖子, 然而,当我聚合同一个模型时,postid被删除。然后(posts=>console.log(posts))在第一次调用时返回旧值,而不更新组件 编辑:只是意识到有时它返回正确的值,但有时它也返回旧值。有人知道为什么吗?我能做些什么来解决这个问题 router.delete('/de

这是我的路线。我正在尝试删除文档中的项目。正在删除该项,但它返回旧值。例如:

Allposts有一个带有posts的数组:[postid:{type:String},…] 我正在尝试使用$pull删除一个特定的帖子, 然而,当我聚合同一个模型时,postid被删除。然后(posts=>console.log(posts))在第一次调用时返回旧值,而不更新组件

编辑:只是意识到有时它返回正确的值,但有时它也返回旧值。有人知道为什么吗?我能做些什么来解决这个问题

router.delete('/deletepost', (req, res) => {
    // console.log(req.query.postid)
    if (req.query.category === 'forsale') {
        ForSalePosts.findById(req.query.postid)
            // .then(post => console.log(post))
            .deleteOne()
            .catch(err => console.log(err))

        AllPosts.updateOne({ user: req.query.userid },
            { $pull: { posts: { postid: req.query.postid } } })
            .catch(err => console.log(err))
            AllPosts.aggregate(
                [

                    { $match: { user: ObjectId(req.query.userid) } },
                    { $unwind: '$posts' },
                    { $sort: { 'posts.date': -1 } }

                ]
            )
                .then(posts => {
                    // console.log(posts)
                    res.json(posts)
                })
                .catch(err => res.status(404).json({ nopostfound: 'There is no posts' }))

    }
})
REACT函数调用:

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

const AllPostsSchema = new Schema({
    user: {
        type: Schema.Types.ObjectId,
        ref: 'users'
    },
    posts: [{
        postid: {
            type: String
        },
        title: {
            type: String
        },
        category: {
            type: String
        },
        subcategory: {
            type: String
        }, category: {
            type: String
        },
        description: {
            type: String
        },
        name: {
            type: String
        },
        price: {
            type: Number
        },
        email: {
            type: String
        },
        phonenumber: {
            type: Number
        },
        language: {
            type: String
        },
        make: {
            type: String
        },
        model: {
            type: Number
        },
        odometer: {
            type: Number
        },
        condition: {
            type: String
        },
        state: {
            type: String
        },
        town: {
            type: String
        },
        city: {
            type: String
        },
        links: [{ type: String }],

        date: {
            type: Date,
            default: Date.now
        }
    }]

})


module.exports = AllPosts = mongoose.model('allposts', AllPostsSchema)

所有mongo查询都返回部分承诺。您必须使用
。然后
来解决每个承诺

在这里,您可以不使用
连续运行所有查询。然后
异步等待
。因此,无论何时从
AllPosts
$pull
,您都会立即调用
AllPosts
聚合查询,该查询有时会执行,有时不会执行

因此,为了让它一个接一个地运行,您必须使用
。然后
异步等待

  deletePost = (category, postid) => {
        const postinfo = {
            category: category.toLowerCase(),
            postid: postid,
            userid: this.props.auth.user.id
        }

        this.props.deletePost(postinfo)
    }

您需要将
选项
参数添加到
删除
中,如:

router.delete("/deletepost", (req, res) => {
  if (req.query.category === "forsale") {
    ForSalePosts.findById(req.query.postid)
      .deleteOne()
      .then(() => {
        AllPosts.updateOne(
          { "user": req.query.userid },
          { "$pull": { "posts": { "postid": req.query.postid } } }
        )
          .then(() => {
            AllPosts.aggregate([
              { "$match": { "user": ObjectId(req.query.userid) } },
              { "$unwind": "$posts" },
              { "$sort": { "posts.date": -1 } }
            ]).then(posts => {
              // console.log(posts)
              res.json(posts);
            });
          })
          .catch(err =>
            res.status(404).json({ "nopostfound": "There is no posts" })
          );
      });
  }
})
这将在执行操作后返回新对象。希望这对你有用

AllPosts.updateOne({ user: req.query.userid }, 
    { 
     $pull: { posts: { postid: req.query.postid } } 
    }, 
    { new: true }
);