我怎样才能设置一个id而不是字符串
Posted
技术标签:
【中文标题】我怎样才能设置一个id而不是字符串【英文标题】:how can I set a id without it being string 【发布时间】:2021-06-07 03:06:32 【问题描述】:我有一个名为“用户”的集合,该集合有一个“地址”字段,其中包含一个对象数组 目的:接收地址对象ID,用接收到的数据编辑它,更新数据库 我的代码:
async updateAdress(input)
const idUser, idAdress, adressInfo = input;
let user = await User.findById(idUser);
let counter = 0;
console.log(adressInfo);
let old = user.adressInfo;
user.adressInfo.forEach(adress =>
if (adress.id == idAdress)
old[counter] = adressInfo;
counter++;
);
console.log(old);
return User.findByIdAndUpdate(idUser, $set: adressInfo: old , new: true ).catch(
err => console.error(err)
);
,
问题:它确实编辑了对象数组,控制台只显示了我想要发生的事情(我想),但是在数据库中,它将我编辑的对象字段设置为 null 并更新为不同的 id,所以我假设问题在于我在编辑对象时没有设置 id,所以我尝试在 GraphQL 查询中添加 id,甚至使用“adressInfo._id=idAdress”,但错误不断出现,我认为这是因为 _id 字段现在是一个字符串而不是普通的 MongoDB id,那么我该如何解决这个问题?
【问题讨论】:
您需要使用array update operators 来修改和更新文档中的数组字段。 我找到了解决方案,单独添加了字段,谢谢 【参考方案1】:我找到了解决方案,我会在这里解决像我这样的最终问题
async updateAdress(input)
const idUser, idAdress, adressInfo = input;
let user = await User.findById(idUser);
let counter = 0;
let old = user.adressInfo;
console.log(adressInfo[0].adress);
user.adressInfo.forEach(adress =>
if (adress.id == idAdress)
old[counter]['adress'] = adressInfo[0].adress;
old[counter]['adress2'] = adressInfo[0].adress2;
old[counter]['postalCode'] = adressInfo[0].postalCode;
old[counter]['city'] = adressInfo[0].city;
old[counter]['area'] = adressInfo[0].area;
counter++;
);
console.log(old);
return User.findByIdAndUpdate(idUser, $set: adressInfo: old , new: true ).catch(
err => console.error(err)
);
【讨论】:
应该有一个adressInfo
arg,而不是数组 ... 您可以使用 1-liner old[counter] = ...adressInfo;
... 或更好,缩短 10 倍,使用 .map()
- 返回新的 @ 987654325@ 用于匹配 id 或现有元素以上是关于我怎样才能设置一个id而不是字符串的主要内容,如果未能解决你的问题,请参考以下文章
使用Python for循环,我怎样才能每次都从一个字符串中取出一个字母而没有任何重复