【问题标题】:how can I set a id without it being string我怎样才能设置一个id而不是字符串
【发布时间】: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 来修改和更新文档中的数组字段。
  • 我找到了解决方案,单独添加了字段,谢谢

标签: javascript mongodb mongoose graphql


【解决方案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 或现有元素
猜你喜欢
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 2014-12-14
相关资源
最近更新 更多