簡體   English   中英

如何查詢 mongoose 中的 findOne() 以獲得滿足特定條件的文檔數組的子集?

[英]How to query findOne() in mongoose such that we get subset of array of documents which satisfy particular condition?

當我查詢這個

const pendingOfThisShop = await ShopProfile.findOne({ shop: req.shop.id, "shopsAffiliate.status":"pending" },{ shopsAffiliate: 1, _id: 0 }

我得到一個像這樣的 object

{
"shopsAffiliate": [
    {
        "status": "approved",
        "_id": "5db315a6de255a4444b0987b",
        "affiliateId": "5db31263a362ed4ed84c7ad5"
    },
    {
        "status": "pending",
        "_id": "5db315c5de255a4444b0987d",
        "affiliateId": "5db2b4713db4101e48836f0a"
    }
]}

我得到兩個狀態:“已批准”和狀態:“待定”。 我只想在 shopAffiliate 數組中獲取那些狀態為“待定”的對象。 我應該怎么辦?

嘗試這個:

const pendingOfThisShop = await ShopProfile.findOne({ shop: mongoose.Types.ObjectId(req.shop.id), "shopsAffiliate.status":"pending" },{ "shopsAffiliate": {'$elemMatch': {"status":"pending"}}, _id: 0 });

我得到兩個狀態:“已批准”和狀態:“待定”

您的查詢正在返回預期結果。

shopsAffiliate是一組嵌套文檔。 shopsAffiliate本身是ShopProfile集合中文檔的一部分。 您的查詢檢查ShopProfile中滿足以下 2 個條件的任何文檔

  1. shop: req.shop.id
  2. "shopsAffiliate.status":"pending"

當它找到任何符合上述兩個條件的文檔時,它會返回整個文檔 它不關心匹配文檔的shopsAffiliate數組中是否有其他文檔沒有pending狀態,它只需要shopsAffiliate數組中找到至少 1 個具有pending狀態的文檔,一旦找到,它就會返回整個文件

我只想在 shopAffiliate 數組中獲取那些狀態為“待定”的對象。 我應該怎么辦?

您可以使用聚合操作來獲得所需的結果

const pendingOfThisShop = await ShopProfile.aggregate([
      {
          $match: {
              shop: req.shop.id,
              "shopsAffiliate.status": "pending"
          }
      },
      {
          $unwind: "$shopsAffiliate"
      },
      {
          $match: { "shopsAffiliate.status": "pending" }
      }
]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM