簡體   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