Node.js 在MongoDB中找不到正确的查询

Node.js 在MongoDB中找不到正确的查询,node.js,mongodb,mongoose,mongodb-query,Node.js,Mongodb,Mongoose,Mongodb Query,我一直在试图为下面这些简化的文档提出一个查询。我的数据库由几个类似的数据组成 既然MongoShell中没有嵌套查询,有没有其他可能的方法来获取我想要的 我正试图获得一份药品清单,该清单由我所在DB中30%以上的药房所有,无论数量如何 [ { "Pharmacy": "a", "Medicine": [ { "MedName": "MedA", "Quantity": 55 }, { "Med

我一直在试图为下面这些简化的文档提出一个查询。我的数据库由几个类似的数据组成

既然MongoShell中没有嵌套查询,有没有其他可能的方法来获取我想要的

我正试图获得一份药品清单,该清单由我所在DB中30%以上的药房所有,无论数量如何

[
  {
    "Pharmacy": "a",
    "Medicine": [
      {
        "MedName": "MedA",
        "Quantity": 55
      },
      {
        "MedName": "MedB",
        "Quantity": 34
      },
      {
        "MedName": "MedD",
        "Quantity": 25
      }
    ]
  },
  {
    "Pharmacy": "b",
    "Medicine": [
      {
        "MedName": "MedB",
        "Quantity": 60
      },
      {
        "MedName": "MedC",
        "Quantity" : 34
      }

    ]
  }
]

如果可能的话,我怎么做

您不能在单个查询中执行此操作,但有一种方法:

size = (db['01'].distinct("Pharmacy")).length;
minPN = Math.ceil(size*0.3);

db['01'].aggregate(
    // Pipeline
    [
        // Stage 1
        {
            $unwind: {
                path : "$Medicine", 
            }
        },
        // Stage 2
        {
            $group: {
            _id:"$Medicine.MedName",
            pharmacies:{$addToSet:"$Pharmacy"}
            }
        },
        // Stage 3
        {
            $project: {
              pharmacies:1,
            pharmacies_count:{$size:"$pharmacies"}
            }
        },
        {
          $match:{pharmacies_count:{$gte:minPN}}
        }   
    ]
);

请在此处检查答案:

您应该得到如下结果:

[
  {
    "_id": {
      "medName": "MedC"
    },
    "count": 1,
    "percentage": "50%"
  },
  {
    "_id": {
      "medName": "MedD"
    },
    "count": 1,
    "percentage": "50%"
  },
  {
    "_id": {
      "medName": "MedB"
    },
    "count": 2,
    "percentage": "100%"
  },
  {
    "_id": {
      "medName": "MedA"
    },
    "count": 1,
    "percentage": "50%"
  }
]

希望这能有所帮助。

您好,您能提供完整的文档架构而不仅仅是数组吗?在这种情况下,其他字段为什么会很重要?某些查询可能与嵌套数组和文档不同。您的意思是,整个数组是更大文档的一部分吗?如果是这样,则不是这样,文档是每个药房记录,带有一个更简单的字段。我刚刚添加了两个示例recordsok,如果我需要展开您的阵列,但没有阵列名称,我该怎么办?只需提供信息,或者不要寻求任何帮助!是的,这确实很有帮助。但是,如果我需要将输出限制在某个百分比以上,我应该怎么做呢?不管怎样,我已经将此添加到$match:{count:{$gte:MathCielPharmaCount*0.15}中,这正是我想要的。
[
  {
    "_id": {
      "medName": "MedC"
    },
    "count": 1,
    "percentage": "50%"
  },
  {
    "_id": {
      "medName": "MedD"
    },
    "count": 1,
    "percentage": "50%"
  },
  {
    "_id": {
      "medName": "MedB"
    },
    "count": 2,
    "percentage": "100%"
  },
  {
    "_id": {
      "medName": "MedA"
    },
    "count": 1,
    "percentage": "50%"
  }
]