gpt4 book ai didi

json - 无法将数据插入集合

转载 作者:太空宇宙 更新时间:2023-11-04 02:13:32 25 4
gpt4 key购买 nike

我有官员架构,其中如果用户想要修复约会,他的条目就会在数据库中进行。架构是:

officerSchema = mongoose.Schema({
email : {type: String,
index: { unique: true }
},
appointmentList : Array // array of jsonObject of dates and userID
});

AppointmentList 是一个 JSON 对象数组,其中包含必须进行预约的官员的 ID、日期和用户 ID(想要确定预约的用户)。

但是为了避免重复的预约条目,我一直在使用互联网上提到的几种方法。到目前为止,他们都没有为我工作过。我发布下面的代码。下面代码的问题是它永远不会在约会列表中插入任何数据。但是,如果我使用 save() 而不是 update() 会发生插入,但也会插入重复项。

这是我想要从数据库添加到数组中的 JSON 对象,

{
"id": "1321231231",
"appointment": {
"userID": "31321",
"date": "24 March"
}
}

var ID = requestObject.id;
var newObject = {$addToSet: requestObject.appointment};
OfficerModel.findOne({_id : ID}, function(err, foundData) {
if(err) {
console.log(err);
return;
}
else {
var dbList = foundData.list;
dbList.push(newObject);
foundData.update(function(err, updatedData) {
if(err) {
console.log( err);
}
else {
console.log("successful");
}
});
}
});

最佳答案

使用$addToSet运算符可能适合您。

var appt = {
id: "1321231231",
appointment: {
userID: "31321",
date: "24 March"
}
}

Officer.update(
{_id: ID},
{$addToSet: {appointmentList: appt}},
function(err) { ... }
);

但这不是一个完美的解决方案,因为 {one: 1, Two: 2} 和​​ {two: 2, one: 1} 不被解释为相等,因此它们都可以使用 $addToSet 添加到数组中。

为了完全避免重复,你可以这样做:

var appt = {
id: "1321231231",
appointment: {
userID: "31321",
date: "24 March"
}
};

Officer.findOne(
{_id: ID, 'appointmentList.id': appt.id},
function(err, officerDoc) {
if (err) { ... }

// since no document matched your query, add the appointment
if (!officerDoc) {
Officer.update(
{_id: ID},
{$push: {appointmentList: appt}},
function(err) { ... }
);
}

// since that appointment already exists, update it
else {
Officer.update(
{_id: ID, 'appointmentList.id': appt.id},
{$set: {'appointmentList.$.appointment': appt.appointment}},
function(err) { ... }
);
}
}
);

上面更新现有约会的操作使用 positional operator .

关于json - 无法将数据插入集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36898183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com