Javascript 如果对象存在,则更新值;如果不在数组mongodb下,则创建值

Javascript 如果对象存在,则更新值;如果不在数组mongodb下,则创建值,javascript,node.js,arrays,mongodb,mongoose,Javascript,Node.js,Arrays,Mongodb,Mongoose,我有这样一个数据集: [ { "createdate": "2020-06-03T18:30:00.000Z", "hold": [ { "time": "12:30", "user": [ "5ed8ae4891501a1c10246dfe" ] }, { "time": "13:00"

我有这样一个数据集:

[
   {
      "createdate": "2020-06-03T18:30:00.000Z",
      "hold": [
         {
            "time": "12:30",
            "user": [
               "5ed8ae4891501a1c10246dfe"
            ]
         },
         {
            "time": "13:00",
            "user": [
               "5ed8ae4891501a1c10246dfe"
            ]
         },
         {
            "time": "13:30",
            "user": [
               "5ed8ae4891501a1c10246dfe"
            ]
         }
      ],
      "_id": "5ed745c38b4d8646601bad1d",
      "__v": 0
   },
   {
      "createdate": "2020-06-04T18:30:00.000Z",
      "hold": [
         {
            "time": "12:30",
            "user": [
               "5ed8ae4891501a1c10246dfe"
            ]
         },
         {
            "time": "13:00",
            "user": [
               "5ed8ae4891501a1c10246dfe"
            ]
         },
         {
            "time": "13:30",
            "user": [
               "5ed8ae4891501a1c10246dfe"
            ]
         }
      ],
      "_id": "5ed745c3404a701fb888e732",
      "__v": 0
   }
]
现在我想更新这两个Entries上的一些数据,假设我必须更新这两个Entries上的“13:00”,以推送5ed8ae4891501a1c10246dfe,并创建/推送用户id为5ed8ae4891501a1c10246dfe的新对象“14:30”

还要检查用户阵列上是否已经存在id,然后不执行任何操作

userdata=[{“startdate”:“2020,6,4”,“enddate”:“2020,6,4”,“time”:[“12:30”,“13:00”,“13:30”]}] userdata是我们在收集时必须更新的数据。 我试过的是:

但我感到困惑的是,这种方法比数据库查询要长一点。我们可以选择通过javascript来解决这个问题,但在数据库方面,必须有一些智能查询,在几行代码中执行所有这些任务,而不是使用javascript

任何MongoDB数据库的专家,请建议我如何通过DB查询而不是javascript执行此操作。我们将非常感谢专家们的任何帮助。提前谢谢

let userdata  = [{ "startdate": "2020, 6, 4", "enddate": "2020, 6, 5", "time": ["12:30", "13:00", "13:30"] }]
const test = async () => {
    try {
    // I am Using mongoose, so CollectionName is dummy name to share
        let data = [];
        let getCalenderData = await CollectionName.find(
            { createdate: { $gte: new Date(userdata[0].startdate), $lte: new Date(userdata[0].enddate) } }
        ).exec();
        console.log(getCalenderData)
        if (getCalenderData.length > 0) {
            data = getCalenderData;
        }
        console.log(JSON.stringify(data, null, 3))
    // So here what I tried to achieve is first on one query pull all data,
    // then using filter function to segregate the data,
   // then after this set push or pull the data at single query.
    } catch (error) {
        console.log(error)
    }
}

test();