【问题标题】:Mongoose - push array in deeply nested objectMongoose - 在深度嵌套的对象中推送数组
【发布时间】:2020-08-28 20:02:09
【问题描述】:

我正在尝试将从 websocket 获得的数据数组推送到一个对象中,在本例中为 oneMin。这就是我想要一个数组的地方,而不是高于kline 和低于bybit

这是我所看到的:

这是数据模型:

这是我目前拥有的代码:

ws.on('update', async function(message) {

  if (message.data !== null) {

    console.log(message)

    const Open = message.data[0].open;
    const High = message.data[0].high;
    const Close = message.data[0].close;
    const Low = message.data[0].low;
    const Volume = message.data[0].volume;
    const Timestamp = message.data[0].timestamp;

    const OHLCV = [Open, High, Low, Close, Volume, Timestamp]

    // var ohlc = new marketModel({ 
    //   bybit: {
    //             kline: {
    //               ethusd: {
    //                 oneMin: {
    //                   open: Open,
    //                   high: High,
    //                   low: Low,
    //                   close: Close,
    //                   volume: Volume,
    //                   timestamp:  Timestamp
    //                 },
    //               }
    //             }
    //           }
    // });
    // ohlc.push(function (data) {
    //   console.log("just saved to BTCUSDkline!");
    // });

    let setOHLCV = await marketModel.updateMany(
      {},
      {
        $addToSet: {
          bybit: {
            kline: {
              ethusd: {
                oneMin: {
                  open: Open,
                  high: High,
                  low: Low,
                  close: Close,
                  volume: Volume,
                  timestamp:  Timestamp
                },
              }
            }
          }
        },
      },
      {
        upsert: true,
        new: true,
      },
    );
    setOHLCV;
  }
});

我已经在这个问题上停留了一段时间,所以任何帮助都将不胜感激!

我想我会在一段时间内第一次求助于 SO!

编辑:所以不是$addToSet,而是$setOnInsert 在对象下的数组中设置数据,更近了一步!它甚至没有替换它,它只是设置给定的第一个数组。现在我可以说$Set 就像$setOnInsert 但它替换了数据。

【问题讨论】:

    标签: node.js arrays mongodb mongoose


    【解决方案1】:

    简单的解决方案,显然我应该这样写:

        let setOHLCV = await marketModel.findOneAndUpdate(
          {},
          {
            $push: {
              'bybit.kline.ethusd.oneMin': {            
                open: Open,
                high: High,
                low: Low,
                close: Close,
                volume: Volume,
                timestamp:  Timestamp
              }
            }
          },
          {
            upsert: true,
            new: true,
          },
        );
        setOHLCV;
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2019-03-28
      • 1970-01-01
      • 2021-04-17
      • 2021-07-26
      • 2023-01-13
      • 2020-07-08
      相关资源
      最近更新 更多