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();