0

我有以下代码片段。

const user = await User.findOne({ email: ownerData.email })
            .select('-_id -__v -updatedAt')
            .lean();
        if (!user) {
            throw new HttpException(404, 'User not found');
        }
        await User.deleteOne({ email: ownerData.email });

        console.log(user);

        const newUser = await User.create({
            ...user,
            ...{
                address: ownerData.address,
                city: ownerData.city,
                state: ownerData.state,
            },
            _id: ownerId,
        });
        await newUser.save();

所以基本上我想要做的是删除已经存在的旧用户创建一个新用户,其中包含旧用户的详细信息。但不幸的是,即使我没有使用旧updatedAt字段,旧updatedAt字段也会填充到新的用户对象文档中。

ownerId 有可能与旧的_id 相同。我相信是因为这个,但我没有解决这个问题。

谢谢

编辑

我在这个问题上得到了另一个有趣的线索。

因为我正在考虑createdAt在第一行代码

const user = await User.findOne({ email: ownerData.email })
            .select('-_id -__v -updatedAt')
            .lean();

新文档正在占用该createdAt领域的时间。一旦我删除并检查了 newUser 正在新的时间创建。createdAt和之间有什么关系updatedAt吗?

4

1 回答 1

0

我解决了这个问题。但我没有一个明确的解释为什么。如果有人有完美的解释,请在下面评论。

我解决了updatedAt在创建模式后单独更新字段的问题。

const newUser = await User.create({
        ...user,
        ...{
            address: ownerData.address,
            city: ownerData.city,
            state: ownerData.state,
        },
        _id: ownerId,
    });
    newUser.updatedAt = new Date();
    await newUser.save();

我不知道为什么当我喜欢下面的时候这没有得到更新

const newUser = await User.create({
        ...user,
        ...{
            address: ownerData.address,
            city: ownerData.city,
            state: ownerData.state,
        },
        _id: ownerId,
        updatedAt: new Date()
    });     
    await newUser.save();
于 2021-03-31T05:30:10.480 回答