【问题标题】:How to set a value in last element of array and push a new object into that array at the same time in mongoose?如何在数组的最后一个元素中设置一个值并在猫鼬中同时将一个新对象推送到该数组中?
【发布时间】:2021-06-25 03:05:30
【问题描述】:
"pmsStatus": [
        {
          status: 0,
          fromTimeStamp: "12:40:50",
          reason: "no crane",
          toTimeStamp: "13:40:50"
        },
        {
          status: 1,
          fromTimeStamp: "13:40:50",
          toTimeStamp: "14:40:50"
        },
        {
          status: 0,
          fromTimeStamp: "14:40:50",
          toTimeStamp: "15:40:50",
          reason: "breakfast",
          
        }
]

在中,将其视为 mongodb 集合。我需要对此进行 findOneAndUpdate 操作。地位不一样,但地位应该不同。如果我们得到相同的状态意味着,它不应该执行任何更新操作。如果状态与以前不同,则表示它应该执行更新操作。如果我们要存储到集合中的状态是 1 并且对象的前一个最后一个元素的状态是 0,那么 toTimeStamp 应该加上当前时间到最后一个对象。并且对于新存储的对象的状态为 0 并且 fromTimeStamp 应该加上当前时间(即)最后一个元素的 toTeStamp 和当前元素的 FromTimeStamp 总是相同的


我的代码

pmsStatus.findOneAndUpdate(
                        {_id}
                        , {
                            $push: {
                                dataP
                            }
                        })

我知道上面的代码不正确,但请帮助我。我是 mongodb 的初学者。谢谢

【问题讨论】:

    标签: arrays mongodb mongoose mongodb-query


    【解决方案1】:

    如果您使用的是 MongoDB 版本 >= 4.4,请尝试以下解决方案:

    添加两个格式为“HH:MM:SS”的时间戳的逻辑可以在here找到。

    let newObj = {
        status: 1,
        fromTimeStamp: "14:40:50",
        toTimeStamp: "15:40:50",
        reason: "breakfast",
    
    };
    
    db.testCollection.findOneAndUpdate(
        {},
        [
            {
                $set: {
                    pmsStatus: {
                        $function: {
                            body: function(pmsStatus, newObj) {
                                let lastObj = pmsStatus[pmsStatus.length - 1];
                                
                                if(newObj.status != lastObj.stattus) {
                                    let result;
                                    // Logic to add timestamps and store it in result
                                    pmsStatus[pmsStatus.length - 1] = result;
                                }
                                
                                return pmsStatus;
                            },
                            args: ["$pmsStatus", newObj],
                            lang: "js"
                        }
                    }
                }
            }
        ],
        {
            returnNewDocument: true
        }
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2022-11-22
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      相关资源
      最近更新 更多