Javascript 节点js和mongo db错误

Javascript 节点js和mongo db错误,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有一个模拟交易的程序,它似乎工作得很好,特别是当我设定了一个止损或获利回吐的时候。但是,当出现多个事件时,它只执行一个。我似乎不明白。我称之为短期利息的抽象也会发生这种情况。当我保存时,Mongo似乎创建了两个实例,这有点问题。我知道代码已经完成了,但我打算让它工作起来,然后开始优化。以下是执行上述抽象的代码: tradeIdIndex = results.history[results.history.length - 1]._id; if(req.body.type

我有一个模拟交易的程序,它似乎工作得很好,特别是当我设定了一个止损或获利回吐的时候。但是,当出现多个事件时,它只执行一个。我似乎不明白。我称之为短期利息的抽象也会发生这种情况。当我保存时,Mongo似乎创建了两个实例,这有点问题。我知道代码已经完成了,但我打算让它工作起来,然后开始优化。以下是执行上述抽象的代码:

    tradeIdIndex = results.history[results.history.length - 1]._id;
        if(req.body.typeofTrade == 'short'){
            results.shortInterest.push({
                time : Date(),
                price : req.body.price,
                tradeId : tradeIdIndex,
                typeofTrade : req.body.typeofTrade,
                quantity : req.body.quantity,
                userId : req.body.userId
            })
            results.save();
        }
这节省了我希望在满足某些条件后删除的短期利息。如果满足删除短期利息、takeProfit和StopLoss的条件,则调用下面的代码,这实际上只是函数的一个片段。它按照我的预期执行

if(tradeId){
        console.log("I am checking the sell and cover to remove the respective open trades");
        for(var i = userData.openTrades.length -1; i >= 0; i--){
            if(userData.openTrades[i].celebrity == self.req.celebrityName && userData.openTrades[i].typeofTrade == typeofTrade && userData.openTrades[i].tradeId == tradeId){
                console.log(userData.openTrades[i]);
                userData.openTrades.splice(i, 1);

                userData.save();
            }
        };
        }
它将控制权返回给下面的代码,该代码实际调用它以继续执行

case "short" :
        checkSellandCover(userData, 'short', self, req.tradeId);
        removeStops(self.celebrity, userId, 'cover', req.tradeId);
        removeTakeProfits(self.celebrity, userId, 'cover', req.tradeId);
        removeShortInterest(self.celebrity, userId, 'short', req.tradeId);
        userData.save();

        if(self.celebrity.ask > req.shortPrice){
           value = parseFloat(self.celebrity.ask) * parseFloat(req.quantity) - parseFloat(req.shortPrice) * parseFloat(req.quantity);

           userData.accountValue = parseFloat(userData.accountValue) - value + parseFloat(req.shortPrice) * parseFloat(req.quantity);
           userData.save();
          } else {
                  value = 2 * parseFloat(req.shortPrice) * parseFloat(req.quantity) - parseFloat(self.celebrity.ask) * parseFloat(req.quantity);
                  userData.accountValue = userData.accountValue + value;
                  userData.save();
          }
          break;
如上所述,我的问题是:

1) 为什么mongo会保存我的数据两次。
2) 如果我有多个止损或获利回吐,上述代码将无法正确执行。短期利息也是如此,因为它被保存了两次。现在我已经问了这个问题,我开始认为这是因为我正在执行数据库操作,并且在执行results.save()指令时,数据库搜索可能仍然在执行。

它保存了两次,因为您编写了
userData.save()两次…谢谢我的坏消息。我把它刮掉了。犯了这么愚蠢的错误。