繁体   English   中英

编辑 mongodb 中最后插入的记录

[英]edit the last inserted record in mongodb

我将两个不同的对象插入到数据库中,我是根据一定的标准来做的。

之后,我正在编辑此记录并根据亚马逊回复将状态设置为已验证或未验证。

问题是,我想更新刚刚插入的记录,因为我使用的是 findOneAndUpdate,所以只有一条记录正在编辑,它不是最后一条,而是第一条。

由于用户可以进行任意数量的购买,因此他可以拥有任意数量的记录,但只有在数据库中找到的第一个 object 具有作为参数发送的 userId 被编辑。

我该用什么? 插入 object 的日期和时间还是什么?

async createAndSendToAmazon(data) {
    try {
      const records = new this.model(data);
      const purchaseFromAppObjectRecord = await records.save();
      let userId = purchaseFromAppObjectRecord.UserData[0].userId;
      let receiptId = purchaseFromAppObjectRecord.receiptId;
      await sendToAmazon(userId, receiptId);
      await changeStatusToVerified(userId);
      return purchaseFromAppObjectRecord;
    } catch (error) {
      return error;
    }
  }
}
async function sendToAmazon(userId, receiptId) {
  const requestUrl = `https://appstore-sdk.amazon.com/version/1.0/verifyReceiptId/developer/2:smXBjZkWCxDMSBvQ8HBGsUS1PK3jvVc8tuTjLNfPHfYAga6WaDzXJPoWpfemXaHg:iEzHzPjJ-XwRdZ4b4e7Hxw==/user/${userId}/receiptId/${receiptId}`;
  console.log(requestUrl);

  fetch(requestUrl).then(function (response) {
    if (response.status === 200) {
      console.log(response.status);
      response.json().then(async function (data) {
        AmazonResolver.create(data);
      });
    } else {
      try {
        changeStatusToNotVerified(userId);
        console.log(response.status);
        response.json();
        console.log("err will not add amazon verification object");
      } catch (err) {
        console.log(err);
      }
    }
  });
}
async function changeStatusToVerified(userId) {
  try {
    await purchaseFromAppObjectModel.findOneAndUpdate(
      {
        UserData: { $elemMatch: { userId: userId } },
      },
      { $set: { status: "verified" } }
    );
  } catch (err) {
    console.log(err);
  }
}

我想把我的问题写下来,但我想让你看看我的功能。

// 可以使用 sort aggregate function 对用户进行降序排序,先更新最后一个元素

async function changeStatusToVerified(userId) {
  try {
    await purchaseFromAppObjectModel.findOneAndUpdate(
      {
        UserData: { $elemMatch: { userId: userId } },
      },
      { $set: { status: "verified" } },
      { sort: { userId: -1 }, upsert: true, returnNewDocument: true }
    );
  } catch (err) {
    console.log(err);
  }
}
                  OR 


  async function changeStatusToVerified(userId) {
      try {
        await purchaseFromAppObjectModel.findOneAndUpdate(
          {
            UserData: { $elemMatch: { userId: userId } },
          },
          { $set: { status: "verified" } },
          { sort: { userId: -1 } }
        );
      } catch (err) {
        console.log(err);
      }
    }

如果以后有人经过这里,这对我有用:

.findOneAndUpdate(
        {
          UserData: { $elemMatch: { userId: userId } },
        },
        { $set: { status: "verified" }, limit: 1 }
      )
      .sort({ $natural: -1 });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM