繁体   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