MongoDB vs Javascript-耗时和空间

时间:2020-04-01 10:44:17

标签: javascript node.js mongodb mongoose big-o

我正在与nodejs和mongodb一起实现“类似”功能。

基本上,模型用户有一个属性数组,在其中存储了喜欢的文档的所有ID。

然后我在该数组中查找是否包含喜欢的文档,我将其放在喜欢的位置并将ID从数组中取出,如果不包含ID,则添加一个“喜欢”并将其推入数组。

基本上,我提出了两种解决方案:

在这里,我正在使用JavaScript编写id数组的逻辑。

User.findOne(query)
        .then(user => {
            let add = 0;
            let likedShirts = user.likedShirts
            if (!likedShirts.includes(shirtId)) {
                add = 1
                likedShirts.push(shirtId)
            } else {
                add = -1
                let index = likedShirts.indexOf(shirtId)
                likedShirts.splice(index, 1)
            }

            Shirt.findByIdAndUpdate(shirtId, { $inc: { likes: add } }, { new: true, runValidators: true }, (err, result) => {
                if (err) {
                    res
                        .status(500)
                        .json({ message: err.message })
                    return;
                }

                user.likedShirts = likedShirts
                user.save()

                res
                    .status(200)
                    .json({ likes: result.likes, shirtId: shirtId })
            })
        })
        .catch(err => {
            res
                .status(500)
                .json({ message: err.message })
            return;
        }) 

在这里,我使用的是纯mongo,但首先要找到一个用户,然后是衬衫,然后再是用户。我以某种方式发现它很丑陋,但我总是尝试使用尽可能少的javascript。

 User.findOne(query)
    .then(user => {
        if (!user.likedShirts.includes(shirtId)) {
            Shirt.findByIdAndUpdate(shirtId, { $inc: { likes: 1 } }, { new: true, runValidators: true }, (err, result) => {
                User.findOneAndUpdate(query, { $push: { likedShirts: shirtId } }).then(() => {
                    if (err) {
                        res
                            .status(500)
                            .json({ message: err.message })
                    }
                    res
                        .status(200)
                        .json({ likes: result.likes, shirtId: shirtId })
                })
                    .catch(err => {
                        res
                            .status(500)
                            .json({ message: err.message })
                    })
            })
        } else {
            Shirt.findByIdAndUpdate(shirtId, { $inc: { likes: -1 } }, { new: true, runValidators: true }, (err, result) => {
                User.findOneAndUpdate(query, { $pull: { likedShirts: shirtId } }).then(() => {
                    if (err) {
                        res
                            .status(500)
                            .json({ message: err.message })
                    }
                    res
                        .status(200)
                        .json({ likes: result.likes, shirtId: shirtId })
                })
                    .catch(err => {
                        res
                            .status(500)
                            .json({ message: err.message })
                    })
            })
        }

    })
    .catch(err => {
        res
            .status(500)
            .json({ message: err.message })
    })

基本上,我想知道的是什么,最好的选择是什么?如果我对数据库进行更多咨询(如第二个示例),也可以,或者最好使用javascript。 我尝试测量时间,基本上是相同的,但是我使用的用户和数据很少。有规则吗?最佳做法?

0 个答案:

没有答案
相关问题